awk - Come stampare il numero di caratteri per le prime n righe in un file?


10

Ho un comando:

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

Stampa il numero di caratteri di ogni riga in un file passwd :

52
52
61
48
81
58
etc.

Come posso stampare il numero di caratteri solo per le prime n righe?

Ad esempio - per le prime 3 righe darebbe qualcosa del tipo:

52
52
61

@ilkkachu true.
njzk2,

Se vuoi ignorare il bianco come allora usa sotto - awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN KUMAR

Risposte:


17

Dire awkdi uscire quando sono state lette abbastanza righe:

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

Si noti che questa soluzione ignora le righe vuote, sebbene non per il conteggio delle righe.


difficile e figo! (+1)

2
Se una o più righe sono vuote, l'assegnazione viene valutata su zero (un valore errato) e la lunghezza non verrà stampata.
ilkkachu,

@ilkkachu: a seconda della situazione, sarebbe ragionevole ignorare le righe vuote. Ho aggiunto una nota a riguardo.
Thor,

14

Una versione Awk diretta (non così efficiente come @ Thor's), ma leggermente più chiara:

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

3
Se così fosse awk '{ print length } NR>=3 { exit }' /etc/passwd, lo voterei.
In pausa fino a ulteriore avviso.

3
@DennisWilliamson, grazie. Questo è un ottimo suggerimento, non lo includerò nella mia risposta perché è già implicito nella proposta di Thor.

5

Puoi eseguirlo con il awksolo comando, come ben descritto da @Thor e @JJoao (+1 da me)

È possibile combinare awke headcon il parametro -nsegue il numero di righe come descritto di seguito:

Grazie per il suggerimento di @Maerlyn da eseguire in questo ordine: head | awk

ad es. otterrai le prime 3 righe usando:

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

capo uomo

-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 - fantastico :) per favore accetta la risposta, quando sarai in grado di farlo
Yaron

certo che lo farò - tra circa 10 minuti;) grazie ancora!
bambosze_babuni,

8
Forse anche al contrario, head -n3 /etc/passwd | awkquindi awk non deve elaborare l'intero file.
Maerlyn,

1
AWK può contare le linee, non è necessario head.
In pausa fino a ulteriore avviso.

@DennisWilliamson - grazie per il commento, l'utilizzo è headstata la prima soluzione funzionante che mi è venuta in mente. Ho votato @Thor, la risposta @JJao che utilizza awksolo la soluzione.
Yaron,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.