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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow