The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"написать shell процедуру"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"написать shell процедуру"  +/
Сообщение от ksen9 email(ok) on 12-Ноя-11, 18:57 
Написать shell-процедуру, которая:
•    Читает содержимое  двух файлов, передаваемых в качестве первых параметров  (в файлах в каждой строке представлено по одному целому числу);
•    Проверяет правильность формата содержимого файлов,  при ошибках выводит соответствующие сообщения и завершает работу;
•    Суммирует числа из первого и второго файлов, расположенные в строках с одинаковым номером;
•    Сортирует полученные суммы по возрастанию и выводит их на экран

с shell вообще не знакома,преподаватель не объяснил,как и что.Объясните пожалуйста как делать,если не пойму shell в течении месяца к экзамену не допустят((

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "написать shell процедуру"  +/
Сообщение от Square (ok) on 12-Ноя-11, 19:34 
> Написать shell-процедуру, которая:
> • Читает содержимое  двух файлов, передаваемых в качестве первых параметров  
> (в файлах в каждой строке представлено по одному целому числу);
> • Проверяет правильность формата содержимого файлов,  при ошибках выводит соответствующие
> сообщения и завершает работу;
> • Суммирует числа из первого и второго файлов, расположенные в строках с
> одинаковым номером;
> • Сортирует полученные суммы по возрастанию и выводит их на экран
> с shell вообще не знакома,преподаватель не объяснил,как и что.Объясните пожалуйста как
> делать,если не пойму shell в течении месяца к экзамену не допустят((

http://www.google.ru/search?hl=ru&source=hp&biw=1235&bih=402...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "написать shell процедуру"  +/
Сообщение от LSTemp (ok) on 26-Ноя-11, 13:40 
> Написать shell-процедуру, которая:
> • Читает содержимое  двух файлов, передаваемых в качестве первых параметров  
> (в файлах в каждой строке представлено по одному целому числу);
> • Проверяет правильность формата содержимого файлов,  при ошибках выводит соответствующие
> сообщения и завершает работу;
> • Суммирует числа из первого и второго файлов, расположенные в строках с
> одинаковым номером;
> • Сортирует полученные суммы по возрастанию и выводит их на экран
> с shell вообще не знакома,преподаватель не объяснил,как и что.Объясните пожалуйста как
> делать,если не пойму shell в течении месяца к экзамену не допустят((

не ходите девки в армию!

СКРИПТ:

[root@local 222]# cat ./calc2file
#!/bin/bash

if [ ${#*} -ne 2 ]
then
   echo "Usage: $0 file1 file2"
   exit
else
   f1="$1"
   f2="$2"
fi

#f1="1.good"
#f2="2.good"
n1=""
n2=""
r=""
f=""

echo "file '$f1'"
echo "====================="
i=0
while read n
do
  c="${n//[[:digit:]]/}"
  echo -ne "\t$(($i+1)): "
  if [[ "${#c}" -eq 0 && "${#n}" -gt 0 ]]
  then
     echo -e "\t$n"
     n1[i]="$n"
  else
     echo -e "\terror: '$n' is not number"
     n1[i]='-'
     f=1
  fi
  i=$(($i+1))
done < $f1
echo "---------------------"
echo "${#n1[*]}: ${n1[*]}"
echo "====================="

echo

echo "file '$f2'"
echo "====================="
i=0
while read n
do
  c="${n//[[:digit:]]/}"
  echo -ne "\t$(($i+1)): "
  if [[ "${#c}" -eq 0 && "${#n}" -gt 0 ]]
  then
     echo -e "\t$n"
     n2[i]="$n"
  else
     echo -e "\terror: '$n' is not number"
     n2[i]='-'
     f=1
  fi
  i=$(($i+1))
done < $f2
echo "---------------------"
echo "${#n2[*]}: ${n2[*]}"
echo "====================="

echo

echo "'$f1' + '$f2'"
echo "====================="
if [[ -n "${f}" || "${#n1[*]}" -ne "${#n2[*]}" ]]
then
   echo -e "\terror: wrong source data"
else
   n="${#n1[*]}"
   for ((i=0; $i<$n ; i=$(($i+1))))
   do
     s[$i]=$((${n1[$i]}+${n2[$i]}))
     echo "${n1[$i]}+${n2[$i]}=${s[$i]}"
   done
fi
echo "====================="

echo

echo "sort"
echo "====================="
for n in ${s[*]}
do
  echo "$n"
done | /bin/sort
echo "====================="

ТЕСТОВЫЕ ФАЙЛЫ:

[root@local 222]# cat ./1.good
50
40
30
20
10

[root@local 222]# cat ./2.good
1
2
3
4
5

[root@local 222]# cat ./1.bad
10
20
30z

40
  50  1
60
70


[root@local 222]# cat ./2.bad
1
2
3
4z
5


ПРИМЕР РАБОТЫ:

[root@local 222]# ./calc2file
Usage: ./calc2file file1 file2

[root@local 222]# ./calc2file 1.bad 2.bad
file '1.bad'
=====================
        1:      10
        2:      20
        3:      error: '30z' is not number
        4:      error: '' is not number
        5:      error: '' is not number
        6:      error: '' is not number
        7:      40
        8:      error: '50  1' is not number
        9:      60
        10:     70
        11:     error: '' is not number
        12:     error: '' is not number
        13:     error: '' is not number
---------------------
13: 10 20 - - - - 40 - 60 70 - - -
=====================

file '2.bad'
=====================
        1:      1
        2:      2
        3:      3
        4:      error: '4z' is not number
        5:      5
        6:      error: '' is not number
        7:      error: '' is not number
---------------------
7: 1 2 3 - 5 - -
=====================

'1.bad' + '2.bad'
=====================
        error: wrong source data
=====================

sort
=====================
=====================

[root@local 222]# ./calc2file 1.good 2.good  
file '1.good'
=====================
        1:      50
        2:      40
        3:      30
        4:      20
        5:      10
---------------------
5: 50 40 30 20 10
=====================

file '2.good'
=====================
        1:      1
        2:      2
        3:      3
        4:      4
        5:      5
---------------------
5: 1 2 3 4 5
=====================

'1.good' + '2.good'
=====================
50+1=51
40+2=42
30+3=33
20+4=24
10+5=15
=====================

sort
=====================
15
24
33
42
51
=====================

PS
brut force


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "написать shell процедуру"  +/
Сообщение от ksen9 email(ok) on 26-Ноя-11, 18:07 
>[оверквотинг удален]
> sort
> =====================
> 15
> 24
> 33
> 42
> 51
> =====================
> PS
> brut force

Я безмерно Вам благодарна!

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "написать shell процедуру"  +/
Сообщение от ACCA (ok) on 28-Ноя-11, 09:25 
> PS
> brut force

Иногда усердие превозмогает разум.


#!/bin/bash

LN=1
paste $1 $2 | while read n1 n2 ; do
    expr $n1 + 0 >/dev/null 2>&1
    [ $? -gt 1 ] && echo Error in $1 line $LN: $n1 && exit 1
    expr $n1 + $n2
    [ $? -gt 1 ] && echo Error in $2 line $LN: $n2 && exit 1
    (( LN++ ))
done | sort -n

Если в $1 будет строка вроде
1 2
то будет ругаться на $2, что есть запланированый баг. Можно написать сложную проверку, а можно забить - никто не требовал, чтобы сообщение об ошибке было с именем файла, да ещё и было всегда без ошибки.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "написать shell процедуру"  +/
Сообщение от LSTemp (ok) on 02-Мрт-12, 00:21 
>[оверквотинг удален]
> in $2 line $LN: $n2 && exit 1
>     (( LN++ ))
> done | sort -n
>
> Если в $1 будет строка вроде
> 1 2
> то будет ругаться на $2, что есть запланированый баг. Можно написать сложную
> проверку, а можно забить - никто не требовал, чтобы сообщение об
> ошибке было с именем файла, да ещё и было всегда без
> ошибки.

Прошу прощения за некропост, но это - не усердие. это просто подход "надо вчера".

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру