2009-10-01 29 views

Antwort

104

die zweite Zeile drucken:

awk 'FNR == 2 {print}' 

das zweite Feld drucken:

awk '{print $2}' 

das dritte Feld der fünften Zeile drucken:

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

bearbeiten : Hier ist ein Beispiel mit einer Kopfzeile und (redundanter) Feldbeschreibung s:

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

Es gibt übrigens bessere Möglichkeiten Spalten auszurichten als "\ t \ t".

+0

Danke! Ist es möglich, die Spalten mit einer bestimmten Zeichenfolge zu drucken? – Tim

21

Um auf Dennis Antwort zu erweitern, verwenden awk ‚s -v Option, um die i und j Werte weitergeben müssen:

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

Können wir ein Beispiel haben, wenn die Option -v hilfreich wäre? –

+1

Hier ist eine: http://StackOverflow.com/q/9418617/7552 –

+1

@Dessert die 'j' ist mit dem Wert' 3' gefüllt, so wenn es 'print $ j' tut es' print $ 3' was druckt die dritte Spalte, so ist es richtig wie es aussieht. –

25

Um die Spalten mit einer bestimmten Zeichenfolge zu drucken, verwenden Sie die // Muster suchen. wenn Sie für die zweite Spalt zum Beispiel suchen, enthält abc:

awk '$2 ~ /abc/' 

... und wenn Sie nur eine bestimmte Spalte drucken:

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

... und für eine bestimmte Zeile Nummer:

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

Danke für die Verwendung von "~" –

0

Da Awk und Perl eng verwandt sind ...


Perl Äquivalenten @ Dennis awk Lösungen:

die zweite Zeile drucken:
perl -ne 'print if $. == 2' file

das zweite Feld drucken:
perl -lane 'print $F[1]' file

das dritte Feld drucken der fünften Zeile:
perl -lane 'print $F[2] if $. == 5' file


Perl Äquivalent @ Glenn-Lösung:

Drucken der j-ten Feld des i-ten Zeile

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


Perl Äquivalenten @ Hai-Lösungen:

Wenn Sie nach zweiten Spalten suchen, die abc enthält:

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

... und wenn Sie nur eine bestimmte Spalte drucken:

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

... und für eine bestimmte Zeilennummer:

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


-l entfernt newlines, und fügt sie wieder in beim Drucken
-a autosplits der Eingangsleitung in Array @F, als Begrenzer
-n Schleife über jede Zeile der Eingabedatei
-e Ausführen den Code in Anführungszeichen Leerzeichen
$F[1] ist das zweite Element des Arrays, da Perl beginnt bei 0
$. die Zeilennummer ist

0

ich diesen Arbeitsbefehl gefunden

root @ Gateway:/home/sshuser # aws EC2 beschreiben-Instanzen --instance-ids i-2db0459d | grep 'STATE \ | TAG' | awk

STATE 'FNR == 1 {print $ 1}'

Verwandte Themen