awk - Como imprimir o número de caracteres para as primeiras n linhas de um arquivo?

11

Eu tenho um comando:

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

Imprime o número de caracteres de cada linha em um arquivo passwd :

52
52
61
48
81
58
etc.

Como posso imprimir o número de caracteres apenas para as primeiras n linhas?

Por exemplo - para as primeiras 3 linhas, seria algo como:

52
52
61
    
por bambosze_babuni 28.03.2017 / 10:50

3 respostas

18

Diga ao awk para sair quando forem lidas linhas suficientes:

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

Note que esta solução ignora as linhas vazias, embora não para a contagem de linhas.

    
por Thor 28.03.2017 / 10:57
14

Uma versão direta do Awk (não tão eficiente como a do Thor), mas um pouco mais clara:

awk 'NR <= 3 {print length}' /etc/passwd
    
por JJoao 28.03.2017 / 12:30
6

Você pode executá-lo com o comando awk , bem descrito por @Thor e @JJoao (+1 de mim)

Você pode combinar awk e head com o parâmetro -n a seguir pelo número de linhas conforme descrito abaixo:

Obrigado pela sugestão do @Maerlyn para executar nesta ordem: head | awk

por exemplo. Você receberá as primeiras 3 linhas usando:

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

chefe man

-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 
    
por Yaron 28.03.2017 / 10:51