Ho imparato che in awk $ 2 è la seconda colonna. Come specificare la linea ith e l'elemento nella colonna ith e nella colonna jth?seleziona riga ed elemento in awk
risposta
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".
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}'
Potremmo avere un esempio di quando usare l'opzione -v sarebbe utile? –
Eccone uno: http://stackoverflow.com/q/9418617/7552 –
@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'è. –
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 }'
Grazie per aver mostrato l'uso "~" –
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
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
Grazie! È possibile stampare le colonne con una stringa specifica? – Tim