Написать shell-процедуру, которая:
• Читает содержимое двух файлов, передаваемых в качестве первых параметров (в файлах в каждой строке представлено по одному целому числу);
• Проверяет правильность формата содержимого файлов, при ошибках выводит соответствующие сообщения и завершает работу;
• Суммирует числа из первого и второго файлов, расположенные в строках с одинаковым номером;
• Сортирует полученные суммы по возрастанию и выводит их на экранс shell вообще не знакома,преподаватель не объяснил,как и что.Объясните пожалуйста как делать,если не пойму shell в течении месяца к экзамену не допустят((
> Написать shell-процедуру, которая:
> • Читает содержимое двух файлов, передаваемых в качестве первых параметров
> (в файлах в каждой строке представлено по одному целому числу);
> • Проверяет правильность формата содержимого файлов, при ошибках выводит соответствующие
> сообщения и завершает работу;
> • Суммирует числа из первого и второго файлов, расположенные в строках с
> одинаковым номером;
> • Сортирует полученные суммы по возрастанию и выводит их на экран
> с shell вообще не знакома,преподаватель не объяснил,как и что.Объясните пожалуйста как
> делать,если не пойму shell в течении месяца к экзамену не допустят((http://www.google.ru/search?hl=ru&source=hp&biw=1235&bih=402...
> Написать shell-процедуру, которая:
> • Читает содержимое двух файлов, передаваемых в качестве первых параметров
> (в файлах в каждой строке представлено по одному целому числу);
> • Проверяет правильность формата содержимого файлов, при ошибках выводит соответствующие
> сообщения и завершает работу;
> • Суммирует числа из первого и второго файлов, расположенные в строках с
> одинаковым номером;
> • Сортирует полученные суммы по возрастанию и выводит их на экран
> с shell вообще не знакома,преподаватель не объяснил,как и что.Объясните пожалуйста как
> делать,если не пойму shell в течении месяца к экзамену не допустят((не ходите девки в армию!
СКРИПТ:
[root@local 222]# cat ./calc2file
#!/bin/bashif [ ${#*} -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
30z40
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
>[оверквотинг удален]
> sort
> =====================
> 15
> 24
> 33
> 42
> 51
> =====================
> PS
> brut forceЯ безмерно Вам благодарна!
> PS
> brut forceИногда усердие превозмогает разум.
#!/bin/bashLN=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, что есть запланированый баг. Можно написать сложную проверку, а можно забить - никто не требовал, чтобы сообщение об ошибке было с именем файла, да ещё и было всегда без ошибки.
>[оверквотинг удален]
> in $2 line $LN: $n2 && exit 1
> (( LN++ ))
> done | sort -n
>
Прошу прощения за некропост, но это - не усердие. это просто подход "надо вчера".