2009-10-01 1 views

risposta

104

Per stampare la seconda linea:

awk 'FNR == 2 {print}' 

Per stampare il secondo campo:

awk '{print $2}' 

Per stampare il terzo campo della quinta riga:

awk 'FNR == 5 {print $3}' 

Modifica : Ecco un esempio con una riga di intestazione e una descrizione del campo (ridondante) s:

awk 'BEGIN {print "Name\t\tAge"} FNR == 5 {print "Name: "$3"\tAge: "$2}' 

Esistono modi migliori per allineare le colonne rispetto a "\ t \ t".

+0

Grazie! È possibile stampare le colonne con una stringa specifica? – Tim

21

Per espandere sulla risposta di Dennis, utilizzare awk s' -v opzione per passare i valori i e j:

# print the j'th field of the i'th line 
awk -v i=5 -v j=3 'FNR == i {print $j}' 
+0

Potremmo avere un esempio di quando usare l'opzione -v sarebbe utile? –

+1

Eccone uno: http://stackoverflow.com/q/9418617/7552 –

+1

@dessert il 'j' viene inserito con il valore' 3', quindi quando esegue 'stampa $ j' sta facendo' stampa $ 3' che sta stampando la terza colonna, quindi è corretta così com'è. –

25

Per stampare le colonne con una stringa specifica, si utilizza il modello // ricerca. Per esempio, se siete alla ricerca di seconda colonna che contiene abc:

awk '$2 ~ /abc/' 

... e se si desidera stampare solo una determinata colonna:

awk '$2 ~ /abc/ { print $3 }' 

... e per una particolare linea numero:

awk '$2 ~ /abc/ && FNR == 5 { print $3 }' 
+0

Grazie per aver mostrato l'uso "~" –

0

Poiché awk e perl sono strettamente correlati ...


Perl equivalenti di @ soluzioni awk di Dennis:

Per stampare la seconda linea:
perl -ne 'print if $. == 2' file

Per stampare il secondo campo:
perl -lane 'print $F[1]' file

Per stampare il terzo campo della quinta riga:
perl -lane 'print $F[2] if $. == 5' file


Perl equivalente di @ soluzione di Glenn:

Stampa campo j'th-esimo della linea di

perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file


Perl equivalenti di @ soluzioni Hai:

se stai cercando le second colonne che contengono abc:

perl -lane 'print if $F[1] =~ /abc/' foo

... e se si desidera stampare solo una determinata colonna:

perl -lane 'print $F[2] if $F[1] =~ /abc/' foo

... e per un determinato numero di riga:

perl -lane 'print $F[2] if $F[1] =~ /abc/ && $. == 5' foo


-l rimuove a capo, e li aggiunge nel caso di stampa
-a autosplits la linea di ingresso in una matrice @F, utilizzando gli spazi come delimitatore
-n ciclo su ogni riga del file di input
-e eseguire il codice all'interno di citazioni
$F[1] è il secondo elemento della matrice, poiché Perl inizia 0
$. è il numero di riga

0

ho trovato questo comando di lavoro

root @ gateway:/home/sshuser # AWS EC2 describe-casi --instance-ids i-2db0459d | grep 'STATO \ | TAG' | awk 'FNR == 1 {print $ 1}'

STATO