Sök…


FS - fältavskiljare

Används av awk för att dela upp varje post i flera fält:

echo "a-b-c
d-e-f" | awk 'BEGIN {FS="-"} {print $2}'

kommer att resultera i:

b
e

Variabeln FS kan också ställas in med alternativet -F :

echo "a-b-c
d-e-f" | awk -F '-' '{print $2}'

Som standard är fälten separerade med whitespace (mellanslag och flikar) och flera mellanslag och flikar räknas som en enda separator.

RS - Record Separator

Används av awk för att dela ingången i flera poster. Till exempel:

echo "a b c|d e f" | awk 'BEGIN {RS="|"} {print $0}'

producerar:

a b c
d e f

Som standard är skivseparatorn det nya linjetecknet.

På liknande sätt: echo "abc | de f" | awk 'BEGIN {RS = "|"} {print $ 2}'

producerar:

b
e

OFS - Output Field Separator

Används av awk för att separera fält som print ut från print . Till exempel:

echo "a b c
d e f" | awk 'BEGIN {OFS="-"} {print $2, $3}'

producerar:

b-c
e-f

Standardvärdet är , en sträng bestående av ett enda utrymme.

ORS - Output Record Separator

Används av awk för att separera poster och matas ut i slutet av varje print . Till exempel:

echo "a b c
d e f" | awk 'BEGIN {ORS="|"} {print $2, $3}'

producerar:

b c|e f

Standardvärdet är \n (nylinjetecken).

ARGV, ARGC - Array of Command Line Arguments

Kommandoradsargument som skickas till awk lagras i den interna matrisen ARGV för ARGC element. Det första elementet i matrisen är programnamnet. Till exempel:

awk 'BEGIN {
   for (i = 0; i < ARGC; ++i) {
      printf "ARGV[%d]=\"%s\"\n", i, ARGV[i]
   }
}' arg1 arg2 arg3

producerar:

ARGV[0]="awk"
ARGV[1]="arg1"
ARGV[2]="arg2"
ARGV[3]="arg3"

FS - fältavskiljare

Variabeln FS används för att ställa in ingångsfältavskiljaren . I awk fungerar utrymme och flik som standardfältavskiljare. Motsvarande fältvärde kan nås via $1 , $2 , $3 ... och så vidare.

awk -F'=' '{print $1}' file
  • -F - kommandoradsalternativ för inställning av ingångsfältavskiljare.
awk 'BEGIN { FS="=" } { print $1 }' file

OFS - Output Field Separator

Denna variabel används för att ställa in utmatningsfältavskiljaren som är ett mellanrum som standard.

awk -F'=' 'BEGIN { OFS=":" } { print $1 }' file

Exempel:

$ 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

Tilldela $1 till $1 i $1=$1 modifierar ett fält ( $1 i detta fall) och det resulterar i awk ombyggnad av posten $0 . Ombyggnad av posten ersätter avgränsarna FS med OFS .

RS - Input Record Separator

Denna variabel används för att ställa in inspelningsavskiljare, som standard en ny linje.

awk 'BEGIN{RS=","} {print $0}' file

ORS - Output Record Separator

Denna variabel används för att ställa in utmatningsregistreringsavskiljare, som standard en ny linje.

awk 'BEGIN{ORS=","} {print $0}' file

NF - Antal fält

Denna variabel ger dig ett totalt antal fält i den aktuella ingångsposten.

awk -F',' '{print NF}' file.csv

Exempel:

$ 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 - Totalt antal poster

Tillhandahåller det totala antalet poster som behandlats i den aktuella awk instansen.

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

Totalt behandlades åtta poster i förekomsten.

FNR - Antal poster i fil

Tillhandahåller det totala antalet poster som bearbetas av awk instansen relativt filerna som awk bearbetar

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

Varje fil hade fyra rader vardera, så när awk stötte på en EOF FNR återställdes till 0.

NF - Antal fält

Anger antalet kolumner eller fält i varje post (posten motsvarar varje rad). Varje rad avgränsas av RS som standardvärde till ny linje.

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 (någonstans där uppe) är standard för flik eller mellanslag. Så Harley, Quinn, Loves, Joker betraktas som kolumner. Fallet gäller för de nästa två raderna, men den sista raden har sju rymdseparerade ord, vilket betyder 7 kolumner.

FNR - Det aktuella postnumret som behandlas

FNR innehåller numret på den inmatade filraden som behandlas. I det här exemplet kommer du att se awk börjar på 1 igen när du börjar bearbeta den andra filen.

Exempel med en fil

$ cat file1
AAAA
BBBB
CCCC
$ awk '{ print FNR }' file1
1
2
3

Exempel med två filer

$ 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

Utökat exempel med två filer

FNR kan användas för att upptäcka om awk bearbetar den första filen eftersom NR==FNR är sant för den första filen. Om vi till exempel vill gå med i poster från filer file1 och file2 på deras FNR :

$ 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

Inspelning ZZZZ från file2 saknas eftersom FNR har olika file1 för file1 och file2 och det inte finns någon FNR för olika FNR er.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow