The OpenNET Project / Index page

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

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

"подсчет входных файлов"  +/
Сообщение от medved_1408 (ok) on 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
Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

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


1. "подсчет входных файлов"  +/
Сообщение от phpcoder email(??) on 13-Май-10, 12:45 
>Я набрасала код, но выдает ошибку.

Какую?


>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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "подсчет входных файлов"  +/
Сообщение от phpcoder email(??) on 13-Май-10, 12:55 
>[оверквотинг удален]
>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
)


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "подсчет входных файлов"  +/
Сообщение от medved_1408 (ok) on 13-Май-10, 13:44 
Всем большое спасибо за помощь.


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

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




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

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