Есть ли способ получить целое число, которое возвращает 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
cut
к работе над полным выводом,wc $f
потому что количество пробелов между полями варьируется.Самый простой ответ:
источник
wc -c < file name
, он даст вам только целое число байтов и ничего больше.Просто:
сделаю свою работу. Но этот вывод включает пробелы с префиксом, так как
wc
число выравнивается по правому краю.источник
wc -l < foo.txt | xargs
ref - stackoverflow.com/a/12973694/149428lines=`wc -l < $f`
результате получается переменная «строка», значение которой не имеет начальных пробелов.find . -path -prune -o -name "*.swift" -print0 | xargs -0 wc -l
работает нормально, но распечатывает все файлы. Если я использую,find . -path -prune -o -name "*.swift" -print0 | xargs -0 wc -l <
я получаю сообщение об ошибке.parse error near '\n'
При необходимости отрегулируйте для вашего макета.
Также лучше использовать положительную логику («это файл»), а не отрицательную («не каталог»).
источник
wc $file | awk '{print $4" "$2" "$1}'
- апострофы вне{}
.Иногда wc выводит в разных форматах на разных платформах. Например:
В OS X:
В Centos:
Таким образом, использование только сокращения может не получить номер. Вместо этого попробуйте tr удалить пробелы:
источник
Принятые / популярные ответы не работают на OSX.
Любое из следующего должно быть переносимым на bsd и linux.
ИЛИ
ИЛИ
источник
Если вы перенаправляете имя файла в
wc
него, имя файла будет опущено на выходе.Bash:
или
Вместо использования
for
для перебора выводаls
, сделайте следующее:который будет работать, если есть имена файлов, содержащие пробелы.
Если вы не можете использовать подстановку, вы должны перейти в
while read
цикл:или используйте замену процесса
источник
read lines words characters filename <<< $(wc "$f")
Да, и если вы использовали * для защиты от пробелов, вы также захотите заключить переменную в двойные кавычки при ее использовании.$f
в этом случае), в этом нет необходимости. Кроме того, OP спросил, как получить только целое число. Вы правы, цитируя переменную, но я не показал использование этой переменной, поэтому я не упомянул об этом. Как вы знаете,for f in *
почти всегда следует использовать форму вместо выводаls
.ls
. Это принесет вам награду. partmaps.org/era/unix/award.html#lsread lines words characters _ <<< $(wc "$f")
$_
это просто другая переменная.Если файл небольшой, вы можете позволить себе
wc
дважды позвонить и использовать что-то вроде следующего, что позволяет избежать подключения к дополнительному процессу:$((...))
Является Арифметикой расширения Баша. Вwc
этом случае он удаляет все пробелы из вывода .Это решение имеет больше смысла, если вам нужно либо linecount, либо wordcount.
источник
Как насчет
sed
?источник
источник
Попробуйте это для числового результата:
nlines = $ (wc -l <$ myfile)
источник
Попробуй это:
Он создает счетчик строк и слов (LINE и WC) и увеличивает их значениями, извлеченными из wc (используя $ 1 для значения первого столбца и $ 2 для второго), и, наконец, печатает результаты.
источник
Вывод: строки myfile.txt: 10 слов: 20 байтов: 120
источник
источник
perl
равно используете , то можете также подсчитать количество слов в Perl. Более экономичный подход будет трубаtr -d '[:space:]'