Szukaj…


FS - Separator pól

Używany przez awk do dzielenia każdego rekordu na wiele pól:

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

spowoduje:

b
e

Zmienną FS można również ustawić za pomocą opcji -F :

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

Domyślnie pola są oddzielone białymi spacjami (spacje i tabulatory), a wiele spacji i tabulatorów jest liczonych jako pojedynczy separator.

RS - Separator rekordów

Używany przez awk do dzielenia danych wejściowych na wiele rekordów. Na przykład:

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

produkuje:

a b c
d e f

Domyślnie separatorem rekordów jest znak nowej linii.

Podobnie: echo "abc | de f" | awk „BEGIN {RS =" | "} {print 2 USD} '

produkuje:

b
e

OFS - Separator pól wyjściowych

Używany przez awk do oddzielania pól danych wyjściowych przez instrukcję print . Na przykład:

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

produkuje:

b-c
e-f

Wartość domyślna to , ciąg składający się z pojedynczej spacji.

ORS - Separator rekordów wyjściowych

Używany przez awk do oddzielania rekordów i jest wyprowadzany na końcu każdej instrukcji print . Na przykład:

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

produkuje:

b c|e f

Wartość domyślna to \n (znak nowej linii).

ARGV, ARGC - Tablica argumentów wiersza poleceń

Argumenty wiersza poleceń przekazywane do awk są przechowywane w wewnętrznej tablicy ARGV elementów ARGC . Pierwszym elementem tablicy jest nazwa programu. Na przykład:

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

produkuje:

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

FS - Separator pól

Zmienna FS służy do ustawienia separatora pól wejściowych . W awk spacja i tabulator działają jak domyślne separatory pól. Dostęp do odpowiedniej wartości pola można uzyskać za pomocą $1 $2 $3 ... i tak dalej.

awk -F'=' '{print $1}' file
  • -F - opcja wiersza poleceń do ustawiania separatora pól wejściowych.
awk 'BEGIN { FS="=" } { print $1 }' file

OFS - Separator pól wyjściowych

Ta zmienna służy do ustawienia separatora pól wyjściowych, który jest domyślnie spacją.

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

Przykład:

$ 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

Przypisanie $1 do $1 $1 $1=$1 modyfikuje pole (w tym przypadku $1 ), co powoduje awk odbudowuje rekord $0 . Odbudowa rekordu zastępuje ograniczniki FS OFS .

RS - Separator rekordów wejściowych

Ta zmienna służy do ustawienia separatora rekordów wejściowych, domyślnie nowej linii.

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

ORS - Separator rekordów wyjściowych

Ta zmienna służy do ustawienia separatora rekordów wyjściowych, domyślnie nowej linii.

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

NF - liczba pól

Ta zmienna da ci całkowitą liczbę pól w bieżącym rekordzie wejściowym.

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

Przykład:

$ 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 - Całkowita liczba rekordów

Dostarczy całkowitą liczbę rekordów przetworzonych w bieżącej instancji awk .

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

W instancji przetworzono w sumie 8 rekordów.

FNR - liczba rekordów w pliku

Podaje całkowitą liczbę rekordów przetworzonych przez instancję awk stosunku do plików przetwarzanych przez awk

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

Każdy plik miał 4 wiersze, więc za każdym razem, gdy awk napotkał EOF FNR był resetowany do 0.

NF - liczba pól

Podaje liczbę kolumn lub pól w każdym rekordzie (rekord odpowiada każdej linii). Każda linia jest wyznaczona przez RS która domyślnie jest nowa linia.

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 (gdzieś tam) domyślnie ma tabulację lub spację. Harley, Quinn, Loves, Joker są uważane za kolumny. Wielkość liter obowiązuje dla dwóch następnych wierszy, ale ostatni wiersz ma 7 słów oddzielonych spacjami, co oznacza 7 kolumn.

FNR - numer bieżącego rekordu jest przetwarzany

FNR zawiera numer przetwarzanego wiersza pliku wejściowego. W tym przykładzie zobaczysz awk rozpoczynający się ponownie od 1, gdy zaczynasz przetwarzać drugi plik.

Przykład z jednym plikiem

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

Przykład z dwoma plikami

$ 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

Rozszerzony przykład z dwoma plikami

FNR może być użyty do wykrycia, czy awk przetwarza pierwszy plik, ponieważ NR==FNR jest prawdziwe tylko dla pierwszego pliku. Na przykład, jeśli chcemy dołączyć rekordy z plików file1 i file2 na ich 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

Brak rekordu ZZZZ z file2 ponieważ FNR ma inną maksymalną wartość dla file1 i file2 i nie ma łączenia dla różnych wartości FNR .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow