Подтвердить что ты не робот

Как получить "wc -l" для печати только количества строк без имени файла?

wc -l file.txt

выводит количество строк и имя файла.

Мне нужно только само число (не имя файла).

Я могу это сделать

 wc -l file.txt | awk '{print $1}'

Но может быть, есть лучший способ?

4b9b3361

Ответ 1

Попробуйте следующим образом:

wc -l < file.txt

Ответ 2

cat file.txt | wc -l

В соответствии с справочная страница (для версии BSD у меня нет версии GNU для проверки):

Если файлы не указаны, используется стандартный ввод и файл имя      отображается. Запрос будет принимать ввод до получения EOF или [^ D] в      большинство сред.

Ответ 3

Чтобы сделать это без ведущего пространства, почему бы и нет:

wc -l < file.txt | bc

Ответ 4

Как насчет

wc -l file.txt | cut -d' ' -f1

то есть. выведите выход wc в cut (где разделители являются пробелами и выбирают только первое поле)

Ответ 5

Как насчет

grep -ch "^" file.txt

Ответ 6

Сравнение методов

У меня была похожая проблема, когда я пытался получить количество символов без начальных пробелов, предоставленных wc, что привело меня к этой странице. После опробования ответов ниже приведены результаты моего личного тестирования на Mac (BSD Bash). Опять же, это для подсчета символов; для подсчета строк вы бы сделали wc -l. echo -n пропускает разрыв задней строки.

FOO="bar"
echo -n "$FOO" | wc -c                          # "       3"    (x)
echo -n "$FOO" | wc -c | bc                     # "3"           (√)
echo -n "$FOO" | wc -c | tr -d ' '              # "3"           (√)
echo -n "$FOO" | wc -c | awk '{print $1}'       # "3"           (√)
echo -n "$FOO" | wc -c | cut -d ' ' -f1         # "" for -f < 8 (x)
echo -n "$FOO" | wc -c | cut -d ' ' -f8         # "3"           (√)
echo -n "$FOO" | wc -c | perl -pe 's/^\s+//'    # "3"           (√)
echo -n "$FOO" | wc -c | grep -ch '^'           # "1"           (x)
echo $( printf '%s' "$FOO" | wc -c )            # "3"           (√)

Я бы не стал полагаться на метод cut -f* в целом, поскольку он требует, чтобы вы знали точное количество начальных пробелов, которое может иметь любой заданный вывод. И grep работает для подсчета строк, но не для символов.

bc является наиболее лаконичным, а awk и perl кажутся немного излишними, но все они должны быть относительно быстрыми и достаточно портативными.

Также обратите внимание, что некоторые из них могут быть адаптированы для обрезки окружающего пробела из общих строк (наряду с echo 'echo $FOO', еще одним изящным приемом).

Ответ 7

Очевидно, есть много решений. Вот еще один:

wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"

Это выводит только количество строк, но присутствует символ новой строки (\n), если вы этого не хотите, замените [:blank:] на [:space:].

Ответ 8

Лучший способ - в первую очередь найти все файлы в каталоге, а затем использовать AWK NR (количество переменных записей)

ниже приведена команда:

find <directory path>  -type f | awk  'END{print NR}'

пример: - find /tmp/ -type f | awk 'END{print NR}'

Ответ 9

Это работает для меня, используя обычные wc -l и sed, чтобы убрать любой символ, который не является числом.

wc -l big_file.log | sed -E "s/([a-z\-\_\.]|[[:space:]]*)//g"

# 9249133