Как вывести количество символов для первых n строк в файле?


10

У меня есть команда:

$ awk '{ print length($0); }' /etc/passwd

Он печатает количество символов каждой строки в файле passwd :

52
52
61
48
81
58
etc.

Как я могу напечатать количество символов только для первых n строк?

Например - для первых 3 строк это даст что-то вроде:

52
52
61

@ilkkachu правда.
njzk2

Если вы хотите игнорировать пустое, как тогда, используйте ниже - awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN KUMAR

Ответы:


17

Скажите awkвыйти, когда будет прочитано достаточно строк:

awk '$0 = length; NR==3 { exit }' /etc/passwd

Обратите внимание, что это решение игнорирует пустые строки, но не для количества строк.


хитро и круто! (+1)

2
Если какая-либо строка или строка пуста, присваивание оценивается как ноль (ложное значение), и длина не будет напечатана.
ilkkachu

@ilkkachu: В зависимости от ситуации было бы разумно игнорировать пустые строки. Я добавил примечание об этом.
Тор

14

Прямая версия Awk (не такая эффективная, как у @ Thor's), но чуть более понятная:

awk 'NR <= 3 {print length}' /etc/passwd

3
Если бы это было так awk '{ print length } NR>=3 { exit }' /etc/passwd, я бы проголосовал за это.
Приостановлено до дальнейшего уведомления.

3
@DennisWilliamson, спасибо. Это очень хорошее предложение, я не буду включать его в свой ответ, потому что оно уже подразумевается в предложении Тора.

5

Вы можете выполнить его awkтолько командой, как хорошо описано @Thor и @JJoao (+1 от меня)

Вы можете комбинировать awkи headс параметром -nследует по количеству строк, как описано ниже:

Спасибо за предложение @Maerlyn выполнить в следующем порядке: head | awk

Например, вы получите первые 3 строки, используя:

head -n3 /etc/passwd | awk '{ print length($0); }' 

главный человек

-n, --lines=[-]K
    print the first K lines instead of the first 10; with the leading '-', print all but the last K lines of each file 

@ msjavx86 - отлично :) пожалуйста, примите ответ, когда вы сможете это сделать
Ярон

конечно буду - минут через 10;) еще раз спасибо!
bambosze_babuni

8
Возможно, даже наоборот, head -n3 /etc/passwd | awkпоэтому awk не нужно обрабатывать весь файл.
Maerlyn

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

@DennisWilliamson - спасибо за комментарий, использование headбыло первым рабочим решением, которое пришло мне в голову. Я проголосовал за @Thor, ответ @JJoao, который использует awkтолько решение.
Ярон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.