Ricerca…


FS - Field Separator

Utilizzato da awk per dividere ogni record in più campi:

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

risulterà in:

b
e

La variabile FS può anche essere impostata usando l'opzione -F :

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

Per impostazione predefinita, i campi sono separati da spazi bianchi (spazi e tabulazioni) e più spazi e schede contano come un singolo separatore.

RS - Record Separator

Utilizzato da awk per dividere l'input in più record. Per esempio:

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

produce:

a b c
d e f

Per impostazione predefinita, il separatore di record è il carattere di nuova riga.

Analogamente: echo "abc | de f" | awk 'BEGIN {RS = "|"} {print $ 2}'

produce:

b
e

OFS - Output Field Separator

Utilizzato da awk per separare i campi emessi dall'istruzione print . Per esempio:

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

produce:

b-c
e-f

Il valore predefinito è , una stringa composta da un singolo spazio.

ORS - Output Record Separator

Utilizzato da awk per separare i record e viene print alla fine di ogni istruzione di print . Per esempio:

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

produce:

b c|e f

Il valore predefinito è \n (carattere di nuova riga).

ARGV, ARGC - Array of Command Line Arguments

Gli argomenti della riga di comando passati a awk sono memorizzati ARGV dell'array interno degli elementi ARGC . Il primo elemento dell'array è il nome del programma. Per esempio:

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

produce:

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

FS - Field Separator

La variabile FS viene utilizzata per impostare il separatore dei campi di input . In awk , spazio e tab fungono da separatori di campo predefiniti. È possibile accedere al valore del campo corrispondente tramite $1 , $2 , $3 e così via.

awk -F'=' '{print $1}' file
  • -F - opzione della riga di comando per l'impostazione del separatore dei campi di input.
awk 'BEGIN { FS="=" } { print $1 }' file

OFS - Output Field Separator

Questa variabile viene utilizzata per impostare il separatore dei campi di output, che è uno spazio per impostazione predefinita.

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

Esempio:

$ 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

Assegnando $1 a $1 in $1=$1 modifica un campo ( $1 in questo caso) e questo porta awk ricostruire il record $0 . La ricostruzione del record sostituisce i delimitatori di FS con OFS .

RS - Input Record Separator

Questa variabile viene utilizzata per impostare il separatore dei record di input, per impostazione predefinita una nuova riga.

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

ORS - Output Record Separator

Questa variabile viene utilizzata per impostare il separatore dei record di output, per impostazione predefinita una nuova riga.

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

NF - Numero di campi

Questa variabile ti darà un numero totale di campi nel record di input corrente.

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

Esempio:

$ 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 - Numero totale di record

Fornirà il numero totale di record elaborati nell'istanza di awk corrente.

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

Nell'istanza sono stati elaborati un totale di 8 record.

FNR: numero di record nel file

Fornisce il numero totale di record elaborati awk relativi ai file che awk sta elaborando

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

Ogni file aveva 4 righe ciascuna, quindi ogni volta che awk incontrava un FNR EOF stato reimpostato su 0.

NF - Numero di campi

Fornisce il numero di colonne o campi in ciascun record (il record corrisponde a ciascuna riga). Ogni riga è demarcata da RS che di default è newline.

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 valore predefinito (da qualche parte lassù) è impostato su tabulazione o spazio. Quindi Harley, Quinn, Loves, Joker sono considerati ciascuno come colonne. Il caso vale per le due righe successive, ma l'ultima riga contiene 7 parole separate dallo spazio, ovvero 7 colonne.

FNR: numero di record corrente in elaborazione

FNR contiene il numero della riga del file di input in elaborazione. In questo esempio vedrai awk partire nuovamente da 1 quando inizierai a elaborare il secondo file.

Esempio con un file

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

Esempio con due file

$ 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

Esempio esteso con due file

È possibile utilizzare FNR per rilevare se awk sta elaborando il primo file poiché NR==FNR è vero solo per il primo file. Ad esempio, se vogliamo unire i record dei file file1 e file2 sul loro 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

Record ZZZZ da file2 è presente poiché FNR ha un valore max diverso per file1 e file2 e non vi è alcun join per i diversi FNR s.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow