Come eseguire awk per un certo numero di righe.?

Voglio estrarre alcune righe con awk. È possibile eseguire la seguente attività:

ls -l | awk "BEGIN FOR(i=122;i<=129;i++) FNR==i" 

Come faccio a visualizzare i dettagli dai numeri di riga da 122 a 129?

Commenti

  • Se dovessi farlo in un ciclo, ' suggerirei sed, poiché sed è molto più piccolo (e si carica più velocemente) di awk.

Risposta

Non hai capito come funziona awk. Il “programma” specificato viene sempre eseguito una volta per ogni riga (o “record” in gergo awk) di input, non cè bisogno di FOR o qualsiasi costrutto simile. Utilizza:

metodo dettagliato

ls -l | awk "NR>=122 && NR<=129 { print }" 

metodo più compatto

ls -l | awk "NR==122,NR==129" 

Questo fornisce un intervallo per NR, che è il “Record numero”, tipicamente questo è la riga corrente che awk sta elaborando.

Commenti

  • In realtà il tipico awk il codice per tale attività è solitamente ls -l | awk 'NR==122,NR==129'.
  • qual è il comando per ottenere le ultime 100 righe dal file utilizzando awk
  • @ShihabudheenKM Può dare unocchiata a questo: stackoverflow.com/questions/12546919/…

Risposta

Un altro metodo alternativo sarebbe usare sed :

Ma se, come suggerisce la tua domanda, è importante usare awk per questo, segui il commento di manatwork sulla risposta di Zrajm. Come afferma la documentazione di awk:

 A pattern may consist of two patterns separated by a comma; in this case, the action is performed for all lines from an occurrence of the first pattern though an occurrence of the second. 

Quindi, se lo desideri, puoi anche creare condizioni più avanzate. Ad esempio:

ls -l | awk "NR==122,/foobar/" 

Questo inizierà loutput alla riga 122 e continuerà finché una riga non contenga il parola “foobar”.

Se ci dici il caso duso effettivo , potremmo essere in grado di aiutarti con risposte che forniscono una soluzione migliore. Sono preoccupato che questo suoni come un problema XY .

Risposta

Un altro modo di facendo ciò (anche se preferisco il metodo awk) utilizzando coreutils:

ls -l | tail -n +122 | head -n 8 

Risposta

 awk "NR == 122,NR == 129{print $0}" file 

Qui possiamo estrarre le righe da 122 a 129 del file.

$0 viene utilizzato per stampare tutti i dati del file tra 122 e 129 righe.

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *