awk
Eingebaute Variablen
Suche…
FS - Feldtrenner
Wird von awk verwendet, um jeden Datensatz in mehrere Felder aufzuteilen:
echo "a-b-c
d-e-f" | awk 'BEGIN {FS="-"} {print $2}'
wird darin enden, dass:
b
e
Die Variable FS kann auch mit der Option -F :
echo "a-b-c
d-e-f" | awk -F '-' '{print $2}'
Standardmäßig sind die Felder durch Leerzeichen (Leerzeichen und Registerkarten) getrennt. Mehrere Leerzeichen und Registerkarten gelten als ein Trennzeichen.
RS - Record Separator
Wird von awk verwendet, um die Eingabe in mehrere Datensätze aufzuteilen. Zum Beispiel:
echo "a b c|d e f" | awk 'BEGIN {RS="|"} {print $0}'
produziert:
a b c
d e f
Standardmäßig ist das Datensatztrennzeichen das Zeilenvorschubzeichen.
Ähnlich: echo "abc | de f" | awk 'BEGIN {RS = "|"} {print $ 2}'
produziert:
b
e
OFS - Ausgabefeldtrennzeichen
Wurde von awk Feldern ausgegeben von dem trennen print Aussage. Zum Beispiel:
echo "a b c
d e f" | awk 'BEGIN {OFS="-"} {print $2, $3}'
produziert:
b-c
e-f
Der Standardwert ist , eine Zeichenfolge, die aus einem einzelnen Leerzeichen besteht.
ORS - Output Record Separator
Wird von awk zum Trennen von Datensätzen verwendet und am Ende jeder print ausgegeben. Zum Beispiel:
echo "a b c
d e f" | awk 'BEGIN {ORS="|"} {print $2, $3}'
produziert:
b c|e f
Der Standardwert ist \n (Zeilenvorschubzeichen).
ARGV, ARGC - Array von Befehlszeilenargumenten
Befehlszeilenargumente, die an awk übergeben werden, werden im internen Array ARGV von ARGC Elementen gespeichert. Das erste Element des Arrays ist der Programmname. Zum Beispiel:
awk 'BEGIN {
for (i = 0; i < ARGC; ++i) {
printf "ARGV[%d]=\"%s\"\n", i, ARGV[i]
}
}' arg1 arg2 arg3
produziert:
ARGV[0]="awk"
ARGV[1]="arg1"
ARGV[2]="arg2"
ARGV[3]="arg3"
FS - Feldtrenner
Die Variable FS wird verwendet, um das Eingabefeld-Trennzeichen festzulegen . In awk fungieren Leerzeichen und Tabulator als Standardfeldtrennzeichen. Auf den entsprechenden Feldwert kann über $1 , $2 , $3 usw. zugegriffen werden.
awk -F'=' '{print $1}' file
-
-F- Befehlszeilenoption zum Festlegen des Trennzeichens für das Eingabefeld.
awk 'BEGIN { FS="=" } { print $1 }' file
OFS - Ausgabefeldtrennzeichen
Diese Variable wird verwendet, um das Ausgabefeld-Trennzeichen festzulegen, das standardmäßig ein Leerzeichen ist.
awk -F'=' 'BEGIN { OFS=":" } { print $1 }' file
Beispiel:
$ cat file.csv
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5
$ awk -F',' 'BEGIN { OFS="|" } { $1=$1 } 1' file.csv
col1|col2|col3|col4
col1|col2|col3
col1|col2
col1
col1|col2|col3|col4|col5
Durch die Zuweisung von $1 zu $1 in $1=$1 ein Feld (in diesem Fall $1 ) awk , und awk den Datensatz $0 . Beim Neuaufbau des Datensatzes werden die Trennzeichen FS durch OFS .
RS - Input Record Separator
Diese Variable wird verwendet, um das Trennzeichen für Eingabedatensätze festzulegen, standardmäßig eine Zeilenumbruchzeile.
awk 'BEGIN{RS=","} {print $0}' file
ORS - Output Record Separator
Diese Variable wird verwendet, um das Ausgabesatz-Trennzeichen festzulegen. Standardmäßig wird ein Zeilenumbruch verwendet.
awk 'BEGIN{ORS=","} {print $0}' file
NF - Anzahl der Felder
Diese Variable liefert Ihnen eine Gesamtzahl von Feldern im aktuellen Eingabesatz.
awk -F',' '{print NF}' file.csv
Beispiel:
$ cat file.csv
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5
$ awk -F',' '{print NF}' file.csv
4
3
2
1
5
NR - Gesamtzahl der Datensätze
Gibt die Gesamtzahl der in der aktuellen awk Instanz verarbeiteten Datensätze an.
cat > file1
suicidesquad
harley quinn
joker
deadshot
cat > file2
avengers
ironman
captainamerica
hulk
awk '{print NR}' file1 file2
1
2
3
4
5
6
7
8
Insgesamt wurden 8 Datensätze in der Instanz verarbeitet.
FNR - Anzahl der Datensätze in der Datei
Gibt die Gesamtzahl der von der awk Instanz verarbeiteten Datensätze im Verhältnis zu den von awk verarbeiteten Dateien an
cat > file1
suicidesquad
harley quinn
joker
deadshot
cat > file2
avengers
ironman
captainamerica
hulk
awk '{print FNR}' file1 file2
1
2
3
4
1
2
3
4
Jede Datei hatte jeweils 4 Zeilen. Immer wenn awk einen EOF FNR wurde er auf 0 zurückgesetzt.
NF - Anzahl der Felder
Gibt die Anzahl der Spalten oder Felder in jedem Datensatz an (Datensatz entspricht jeder Zeile). Jede Zeile wird durch RS abgegrenzt, der standardmäßig auf Newline eingestellt ist.
cat > file1
Harley Quinn Loves Joker
Batman Loves Wonder Woman
Superman is not dead
Why is everything I type four fielded!?
awk '{print NF}' file1
4
4
4
7
FS (irgendwo da oben) ist standardmäßig auf Tabulator oder Leerzeichen gesetzt. So werden Harley, Quinn, Loves und Joker jeweils als Spalten betrachtet. Der Fall gilt für die nächsten zwei Zeilen, aber die letzte Zeile hat 7 durch Leerzeichen getrennte Wörter, was 7 Spalten bedeutet.
FNR - Die aktuell verarbeitete Datensatznummer
FNR enthält die Nummer der gerade verarbeiteten Eingabedateizeile. In diesem Beispiel sehen Sie, dass awk wieder bei 1 beginnt, wenn Sie mit der Verarbeitung der zweiten Datei beginnen.
Beispiel mit einer Datei
$ cat file1
AAAA
BBBB
CCCC
$ awk '{ print FNR }' file1
1
2
3
Beispiel mit zwei Dateien
$ cat file1
AAAA
BBBB
CCCC
$ cat file2
WWWW
XXXX
YYYY
ZZZZ
$ awk '{ print FNR, FILENAME, $0 }' file1 file2
1 file1 AAAA
2 file1 BBBB
3 file1 CCCC
1 file2 WWWW
2 file2 XXXX
3 file2 YYYY
4 file2 ZZZZ
Erweitertes Beispiel mit zwei Dateien
FNR kann festgestellt werden, ob awk die erste Datei verarbeitet, da NR==FNR nur für die erste Datei wahr ist. Wenn wir beispielsweise Datensätze aus den Dateien file1 und file2 in ihrem FNR file1 möchten:
$ awk 'NR==FNR { a[FNR]=$0; next } (FNR in a) { print FNR, a[FNR], $1 }' file1 file2
1 AAAA WWWW
2 BBBB XXXX
3 CCCC YYYY
Nehmen Sie ZZZZ von file2 fehlt als FNR unterschiedliche Maximalwert für hat file1 und file2 und kein wird kommen für unterschiedliche FNR s.