The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
подсчет входных файлов, !*! medved_1408, 13-Май-10, 12:42  [смотреть все]
Всем добрый день. Есть задание: Объединить содержимое входных текстовых файлов и записать результат в файл с именем "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
  • подсчет входных файлов, !*! phpcoder, 12:45 , 13-Май-10 (1)
    >Я набрасала код, но выдает ошибку.

    Какую?


    >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

  • подсчет входных файлов, !*! phpcoder, 12:55 , 13-Май-10 (2)
    >[оверквотинг удален]
    >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
    )


  • подсчет входных файлов, !*! allez, 13:01 , 13-Май-10 (3)
    >[оверквотинг удален]
    >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 малость меня опередил и не умничая показал на ошибку пальцем. :-)




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

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