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
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à è solitamentels -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
- risposta duplicata di unix.stackexchange.com/a/89641/72456
sed
, poichésed
è molto più piccolo (e si carica più velocemente) diawk
.