Команда POSIX wc
подсчитывает, сколько строк POSIX в файле. Стандарт POSIX определяет строку как текстовую строку с суффиксом \n
. Без \n
этого чистая текстовая строка не может быть названа строкой.
Но для меня более естественно посчитать, сколько строк текстовой строки в файле. Есть ли простой способ сделать это?
root:[~]# printf "aa\nbb" | wc -l
1
root:[~]# printf "aa\nbb\n" | wc -l
2
root:[~]#
Ответы:
С GNU
sed
вы можете использовать:Поскольку GNU
sed
считает эти лишние символы после последней новой строки дополнительной строкой. GNU,sed
как и большинство утилит GNU, также поддерживает символы NUL при вводе и не имеет ограничений по длине строк (два других критерия, которые делают ввод нетекстовым согласно POSIX).POSIXLy, добавление ответа @ Inian для поддержки слишком длинных строк и байтов NUL:
Эта
tr
команда переводит все последовательности из одного или нескольких символов (каждый байт интерпретируется как символ в локали C, чтобы избежать проблем с декодированием), кроме новой строки, в одинx
символ, поэтомуawk
входные записи будут иметь длину 0 или 1 байт, а их входные данные содержат толькоx
и символы новой строки.источник
Вы можете использовать
awk
для этого специальную переменную,NR
которая отслеживает номер текущей записи с начала файла. Переменная увеличивается в конце каждой строки. При печати вEND
блоке, т. Е. После обработки всех входных строк, печатается номер последней обработанной записи.источник
awk
реализациях это все еще подразумевает, что ввод не содержит символов NUL (что также сделало бы этот ввод нетекстовым согласно POSIX).