получить только целое число из wc в bash
есть ли способ получить целое число, которое wc возвращает в bash?
в основном я хочу написать номера строк и количество слов на экране после имени файла.
output: filename linecount wordcount
Вот что у меня пока:
files=`ls`
for f in $files;
do
if [ ! -d $f ] #only print out information about files !directories
then
# some way of getting the wc integers into shell variables and then printing them
echo "$f $lines $ words"
fi
done
15 ответов
можно использовать cut
команда, чтобы получить только первое слово wc
вывод (который является строкой или количеством слов):
lines=`wc -l $f | cut -f1 -d' '`
words=`wc -w $f | cut -f1 -d' '`
wc $file | awk {'print "" "" ""'}
настройка по мере необходимости для вашего макета.
также лучше использовать положительную логику ("это файл") над отрицательной ("не каталог")
[ -f $file ] && wc $file | awk {'print "" "" ""'}
иногда выходы wc в разных форматах на разных платформах. Например:
в OS X:
$ echo aa | wc -l
1
В Centos:
$ echo aa | wc -l
1
поэтому использование только cut может не получить номер. Вместо этого попробуйте TR удалить символы пробела:
$ echo aa | wc -l | tr -d ' '
принятые / популярные ответы do не работа на OSX.
любое из следующего должно быть портативным на bsd и linux.
wc -l < $f | tr -d ' '
или
wc -l $f | tr -s ' ' | cut -d ' ' -f 2
или
wc -l $f | awk '{print }'
если вы перенаправляете имя файла в wc
он опускает имя файла на выходе.
Баш:
read lines words characters <<< $(wc < filename)
или
read lines words characters <<EOF
$(wc < filename)
EOF
вместо for
для итерации по выходу ls
сделайте так:
for f in *
который будет работать, если есть имена файлов, содержащие пробелы.
если вы не можете использовать globbing, вы должны трубить в while read
петли:
find ... | while read -r f
или используйте замену процесса
while read -r f
do
something
done < <(find ...)
если файл маленький, вы можете позволить себе вызов wc
дважды и используйте что-то вроде следующего, что позволяет избежать трубопроводов в дополнительный процесс:
lines=$((`wc -l $f`))
words=$((`wc -w $f`))
на $((...))
- это Арифметические Расширения Баш. Он удаляет любые пробелы из вывода wc
в этом случае.
такое решение имеет больше смысла, если вам нужно или linecount или в приложения WordCount.
попробуйте это:
wc `ls` | awk '{ LINE += ; WC += } END { print "lines: " LINE " words: " WC }'
он создает количество строк и количество слов (строка и WC) и увеличивает их со значениями, извлеченными из wc (используя $1 Для значения первого столбца и $2 для второго), и, наконец, печатает результаты.
" В основном я хочу записать номера строк и количество слов на экран после имени файла."
answer=(`wc $f`)
echo -e"${answer[3]}
lines: ${answer[0]}
words: ${answer[1]}
bytes: ${answer[2]}"
выходы : myfile.формат txt линий: 10 слова: 20 байт: 120