2013-10-24 1 views
0

Я новичок в оболочке и прочее, и у меня возникла проблема. я должен подсчитать, сколько строк есть файлы в директории вместеСуммы целых чисел в tcsh/sum string to integer

с этим я рассчитывать длину строки каждого файла в течение $ я:

find $i -maxdepth 1 -type f -exec wc -l {} \; | tr -s " " | cut -d " " -f 2 

я список каталогов и верхний код в цикле Еогеаспа выходом этого является числом, сколько строк имеют фактический файл, теперь я просто суммировать их

Но мне нужно суммировать длину для всех файлов в каталоге

три- ed, чтобы добавить линию к некоторой переменной:

@ variable = (`find $i...`) 

, но это дало мне плохо сформированное число ошибок.

У кого-нибудь есть идея, как это решить? им отчаянно, пытаясь сделать это в течение всего дня,

ответ

0

Прежде всего, wc команда добавит вверх линию отсчитывает для вас, так это:

wc -l $i/* | tail -n 1 

будет почти делать то, что вы хотите; различия заключаются в том, что он не устраняет другие вещи, кроме простых файлов, и не учитывает «скрытые» файлы, имена которых начинаются с .. Это:

wc -l `find $i -maxdepth 1 -type f -print` /dev/null | tail -n 1 

должно делать то, что вы хотите. (Добавление /dev/null трюк обрабатывать случай, когда нет файлов в каталоге.) Выход будет что-то вроде

210 total 

(с пробелами); вы можете захватить номер с помощью awk:

wc -l `find $i -maxdepth 1 -type f -print` /dev/null | tail -n 1 | awk '{print $1}' 

Если вы хотите использовать оболочку, чтобы сложить число себя, это должно сделать это:

@ total = 0 
foreach file (`find $i -maxdepth 1 -type f`) 
    @ total += `wc -l < $file` 
end 

хотя для очень больших каталогов, которые вы могли бы столкнуться ограничение на длину командной строки.

И, наконец, я обязан сообщить вам, что csh и tcsh не являются хорошими оболочками для программирования. Их синтаксис сильно нерегулярен. Я использую их в течение многих десятилетий, и мне все же приходится прибегать к пробным ошибкам, чтобы выяснить, будет ли работать какая-то конкретная конструкция. Я настоятельно рекомендую учиться sh и/или bash. См. this article.

+0

Спасибо, последнее было лучшим решением для меня, почти целый день думал, как это сделать, первое на очень интересно, а второе и третье не работают, они никогда не заканчиваются, похоже, они цикличны. – Ricsie

+0

Я только что начал с unix и shell-скриптов, и в нашем университете мы находимся в двух группах, опытные, использующие bash и новички для unix, и мы используем tcsh – Ricsie

+0

@Ricsie: новичков учит tcsh для скриптинга? Это действительно плохая идея. –

Смежные вопросы