Всем добрый день. Есть задание: Объединить содержимое входных текстовых файлов и записать результат в файл с именем "nechet", если количество входных файлов не четное и наоборот, если количество файлов четное записать результат объединения в файл с именем "chet". Я набрасала код, но выдает ошибку.
ls > f1
x=$(wc -l f1)
echo $x
if ($x%2==1)
then
cat *.txt >chet
echo "chet"
else
cat *.txt >nechet
echo "nechet"
fi
>Я набрасала код, но выдает ошибку.Какую?
>ls > f1
>x=$(wc -l f1)
>echo $x
>if ($x%2==1)Наверное, здесь? Попробуйте заменить на if [ `expr $x % 2` -eq 1 ]
>then
>cat *.txt >chet
>echo "chet"
>else
>cat *.txt >nechet
>echo "nechet"
>fi
>[оверквотинг удален]
>x=$(wc -l f1)
>echo $x
>if ($x%2==1)
>then
>cat *.txt >chet
>echo "chet"
>else
>cat *.txt >nechet
>echo "nechet"
>fiВ вашем коде, похоже, есть ошибка: вы считаете все файлы, а добавляете содержимое только файлов, с расширением txt
Предлагаю свой вариант:
find . -type f -name '*.txt' |
(
rm -f {result,chet,nechet}
CNT=0
while read F; do
CNT=$(expr $CNT + 1)
cat "$F" >>result
done
if [ $(expr $CNT % 2) -eq 0 ]; then
mv -vf result chet
else
mv -vf result nechet
fi
)
>[оверквотинг удален]
>x=$(wc -l f1)
>echo $x
>if ($x%2==1)
>then
>cat *.txt >chet
>echo "chet"
>else
>cat *.txt >nechet
>echo "nechet"
>fiНу что же, разжевывать и в ротик класть не стану, но подсказку дам. :-)
$ ls *.txt
de-en.txt file.txt log.txt$ let x=$(ls *.txt | wc -l)%2; echo "x = $x"; if [ "$x" = "0" ]; then echo "Even"; else echo "Odd"; fi
x = 1
Odd
А теперь разбирайтесь в тех командах, которые я ввел в консоли - в них содержится почти полное
решение вашей задачки. Заодно попробуйте найти ошибку в своем скрипте. ;-)P. S. Эх, phpcoder малость меня опередил и не умничая показал на ошибку пальцем. :-)
Всем большое спасибо за помощь.