LINUX.ORG.RU

Командные файлы в Unix


0

0

Помогите,пожалуйста, создать командный файл, уже пробовала как только можно- не получается. Задание: создать командный файл , в котором подсчитать количество строк в каждом файле текущей директории и вывести на экран имена тех, у которых это количество больше 2. Заранее спасибо)

man wc

man cat

man bash там for, [[ ]]

man chmod

man echo

в принципе должно хватить

qnikst ★★★★★
()
for i in `ls`; do
    if [ ! -d "$i" ]; then
        lines="`head -3 \"$i\" 2>/dev/null | wc -l`"

        if [ $lines -gt 2 ]; then
            echo $i
        fi
    fi
done

баги: файлы с пробелами в имени не обрабатываются.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

for i in `ls |sed 's/ /SPACE/g'`; do nf=$(echo $i |sed 's/SPACE/ /g'); lc=$(cat «$nf» |wc -l); if [ $lc -gt 0 ]; then echo $nf; fi; done

Вот грязнейший хак для обработки пробелов. Ничего лучше придумать не могу. ТС, никогда так не делай :]

ZZaiatSS ★★
()
Ответ на: комментарий от Lumi

Я вас ещё немного подкорректирую. ТС нужно командный файл. Это значит, что содержимое фала должно быть таким:

#!/bin/sh
 wc -l * | head -n -1 | awk '$1>2 {print $2}' 

вот теперь, думаю, всё. Нужно только ему права выдать chmod +x командный_файл.sh

name_no ★★
()
Ответ на: комментарий от dhameoelin

> доброЛОР
Дык, человек UNIX изучает! Это вам не тупой хацкер, который хочет помножить отправляемую статистику скачивания на 0.

AITap ★★★★★
()
Ответ на: комментарий от name_no

> вот теперь, думаю, всё. Нужно только ему права выдать chmod +x командный_файл.sh

Нет, не все. А как же файлы, начинающиеся с точки?

bigbit ★★★★★
()
Ответ на: комментарий от Lumi

$ find -type f -maxdepth 1 -exec wc -l {} \; | awk '$1>2 {print $2}'

find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.

name_no ★★
()
Ответ на: комментарий от Lumi

> Зачем лишние процессы? Достаточно -exec

я просто этот exec недолюбливаю. Кривой он какой-то, уже не помню, сколько раз и по каким причинам на это напарывался, но теперь мне надоело тратить время на то, чтобы проверить, сработает ли он в этот раз. Хотя, там проблемы в основном со всякими $()

name_no ★★
()
Ответ на: комментарий от AITap

Цитируем AITap

доброЛОР

Дык, человек UNIX изучает! Это вам не тупой хацкер, который хочет помножить отправляемую статистику скачивания на 0.

а я, собственно, о чем?!

dhameoelin ★★★★★
()
Ответ на: комментарий от name_no

Я просто не проверял, так никаких предупреждений, так как -maxdepth должен стоять первым:
find . -maxdepth 1 -type f -exec wc -l {} \; | awk '$1>2 {print $2}'

Lumi ★★★★★
()
Ответ на: комментарий от Lumi

> find . -maxdepth 1 -type f -exec wc -l {} \; | awk '$1>2 {print $2}'

вот, это то, что мы хотели, теперь добавить в начало #!/bin/sh, права выдать... Думаю, препод завалит ТС-а :( Скажет, надо было циклы )))

name_no ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.