AWK - Szybki przewodnik

AWK jest interpretowanym językiem programowania. Jest bardzo wydajny i specjalnie zaprojektowany do przetwarzania tekstu. Jego nazwa pochodzi od nazwisk jej autorów -Alfred Aho, Peter Weinberger, and Brian Kernighan.

Wersja AWK, którą dystrybuuje GNU / Linux, jest napisana i utrzymywana przez Free Software Foundation (FSF); jest często określany jakoGNU AWK.

Rodzaje AWK

Poniżej znajdują się warianty AWK -

  • AWK - Oryginalny AWK z Laboratorium AT&T.

  • NAWK - Nowsza i ulepszona wersja AWK z AT & T Laboratory.

  • GAWK- To jest GNU AWK. Wszystkie dystrybucje GNU / Linux dostarczają GAWK. Jest w pełni kompatybilny z AWK i NAWK.

Typowe zastosowania AWK

Za pomocą AWK można wykonać niezliczone zadania. Poniżej wymieniono tylko kilka z nich -

  • Przetwarzanie tekstu,
  • Tworzenie sformatowanych raportów tekstowych,
  • Wykonywanie operacji arytmetycznych,
  • Wykonywanie operacji na strunach i wiele innych.

Ten rozdział opisuje, jak skonfigurować środowisko AWK w systemie GNU / Linux.

Instalacja za pomocą Menedżera pakietów

Ogólnie AWK jest domyślnie dostępny w większości dystrybucji GNU / Linuksa. Możesz użyćwhichpolecenie, aby sprawdzić, czy jest obecne w twoim systemie, czy nie. Jeśli nie masz AWK, zainstaluj go na systemie GNU / Linux opartym na Debianie za pomocą Advance Package Tool(APT) menedżer pakietów w następujący sposób -

[jeryy]$ sudo apt-get update [jeryy]$ sudo apt-get install gawk

Podobnie, aby zainstalować AWK w systemie GNU / Linux opartym na RPM, użyj modyfikatora Yellowdog Updator yum menedżer pakietów w następujący sposób -

[root]# yum install gawk

Po instalacji upewnij się, że AWK jest dostępny z wiersza poleceń.

[jerry]$ which awk

Wykonując powyższy kod, otrzymasz następujący wynik -

/usr/bin/awk

Instalacja z kodu źródłowego

Ponieważ GNU AWK jest częścią projektu GNU, jego kod źródłowy jest dostępny do bezpłatnego pobrania. Widzieliśmy już, jak zainstalować AWK za pomocą menedżera pakietów. Zrozummy teraz, jak zainstalować AWK z jego kodu źródłowego.

Poniższa instalacja ma zastosowanie do każdego oprogramowania GNU / Linux, a także do większości innych darmowych programów. Oto kroki instalacji -

Step 1- Pobierz kod źródłowy z autentycznego miejsca. Narzędzie wiersza poleceńwget służy temu celowi.

[jerry]$ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.xz

Step 2 - Rozpakuj i rozpakuj pobrany kod źródłowy.

[jerry]$ tar xvf gawk-4.1.1.tar.xz

Step 3 - Przejdź do katalogu i uruchom konfigurację.

[jerry]$ ./configure

Step 4 - Po pomyślnym zakończeniu configuregeneruje Makefile. Aby skompilować kod źródłowy, wydaj plikmake Komenda.

[jerry]$ make

Step 5- Możesz uruchomić zestaw testów, aby upewnić się, że kompilacja jest czysta. To opcjonalny krok.

[jerry]$ make check

Step 6- Na koniec zainstaluj AWK. Upewnij się, że masz uprawnienia superużytkownika.

[jerry]$ sudo make install

To jest to! Pomyślnie skompilowałeś i zainstalowałeś AWK. Sprawdź to, wykonującawk polecenie w następujący sposób -

[jerry]$ which awk

Wykonując ten kod, otrzymasz następujący wynik -

/usr/bin/awk

Aby zostać ekspertem programistą AWK, musisz znać jego wewnętrzne elementy. AWK kieruje się prostym przepływem pracy - przeczytaj, wykonaj i powtórz. Poniższy diagram przedstawia przepływ pracy AWK -

Czytać

AWK czyta wiersz ze strumienia wejściowego (plik, potok lub stdin) i zapisuje go w pamięci.

Wykonać

Wszystkie polecenia AWK są stosowane sekwencyjnie na wejściu. Domyślnie AWK wykonuje polecenia w każdej linii. Możemy to ograniczyć, dostarczając wzory.

Powtarzać

Ten proces powtarza się, aż plik osiągnie koniec.

Struktura programu

Zrozummy teraz strukturę programu AWK.

BEGIN blok

Składnia bloku BEGIN jest następująca -

Syntax

BEGIN {awk-commands}

Blok BEGIN jest wykonywany przy starcie programu. Wykonywane jest tylko raz. To dobre miejsce na inicjalizację zmiennych. BEGIN jest słowem kluczowym AWK i dlatego musi być zapisane dużymi literami. Należy pamiętać, że ten blok jest opcjonalny.

Body Block

Składnia bloku ciała jest następująca -

Syntax

/pattern/ {awk-commands}

Blok ciała stosuje polecenia AWK w każdym wierszu wejściowym. Domyślnie AWK wykonuje polecenia w każdej linii. Możemy to ograniczyć, dostarczając wzory. Zauważ, że nie ma słów kluczowych dla bloku Body.

END Block

Składnia bloku END jest następująca -

Syntax

END {awk-commands}

Blok END jest wykonywany na końcu programu. END jest słowem kluczowym AWK i dlatego musi być zapisane wielkimi literami. Należy pamiętać, że ten blok jest opcjonalny.

Utwórzmy plik marks.txt który zawiera numer seryjny, nazwisko ucznia, nazwę przedmiotu i liczbę uzyskanych ocen.

1)  Amit    Physics  80
2)  Rahul   Maths    90
3)  Shyam   Biology  87
4)  Kedar   English  85
5)  Hari    History  89

Wyświetlmy teraz zawartość pliku z nagłówkiem za pomocą skryptu AWK.

Example

[jerry]$ awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt

Kiedy ten kod jest wykonywany, daje następujący wynik -

Output

Sr No Name Sub Marks
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89

Na początku AWK wypisuje nagłówek z bloku BEGIN. Następnie w bloku treści odczytuje wiersz z pliku i wykonuje polecenie print AWK, które po prostu drukuje zawartość standardowego strumienia wyjściowego. Ten proces powtarza się, aż plik osiągnie koniec.

AWK jest prosty w użyciu. Polecenia AWK możemy udostępniać bezpośrednio z wiersza poleceń lub w postaci pliku tekstowego zawierającego polecenia AWK.

Wiersz poleceń AWK

Możemy określić polecenie AWK w pojedynczych cudzysłowach w wierszu poleceń, jak pokazano -

awk [options] file ...

Przykład

Rozważ plik tekstowy marks.txt o następującej treści -

1) Amit     Physics    80
2) Rahul    Maths      90
3) Shyam    Biology    87
4) Kedar    English    85
5) Hari     History    89

Wyświetlmy pełną zawartość pliku za pomocą AWK w następujący sposób -

Example

[jerry]$ awk '{print}' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Output

1) Amit     Physics    80
2) Rahul    Maths      90
3) Shyam    Biology    87
4) Kedar    English    85
5) Hari     History    89

Plik programu AWK

Możemy dostarczyć polecenia AWK w pliku skryptu, jak pokazano -

awk [options] -f file ....

Najpierw utwórz plik tekstowy command.awk zawierające polecenie AWK, jak pokazano poniżej -

{print}

Teraz możemy poinstruować AWK, aby czytał komendy z pliku tekstowego i wykonywał akcję. Tutaj osiągamy ten sam wynik, co w powyższym przykładzie.

Example

[jerry]$ awk -f command.awk marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Output

1) Amit  Physics 80
2) Rahul Maths   90
3) Shyam Biology 87
4) Kedar English 85
5) Hari  History 89

Standardowe opcje AWK

AWK obsługuje następujące standardowe opcje, które można dostarczyć z wiersza poleceń.

Opcja -v

Ta opcja przypisuje wartość do zmiennej. Umożliwia przypisanie przed wykonaniem programu. Poniższy przykład opisuje użycie opcji -v.

Example

[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Name = Jerry

Opcja --dump-variable [= plik]

Wyświetla posortowaną listę zmiennych globalnych i ich ostateczne wartości do pliku. Plik domyślny toawkvars.out.

Example

[jerry]$ awk --dump-variables '' [jerry]$ cat awkvars.out

Wykonując powyższy kod, otrzymasz następujący wynik -

Output

ARGC: 1
ARGIND: 0
ARGV: array, 1 elements
BINMODE: 0
CONVFMT: "%.6g"
ERRNO: ""
FIELDWIDTHS: ""
FILENAME: ""
FNR: 0
FPAT: "[^[:space:]]+"
FS: " "
IGNORECASE: 0
LINT: 0
NF: 0
NR: 0
OFMT: "%.6g"
OFS: " "
ORS: "\n"
RLENGTH: 0
RS: "\n"
RSTART: 0
RT: ""
SUBSEP: "\034"
TEXTDOMAIN: "messages"

Opcja --help

Ta opcja wyświetla komunikat pomocy na standardowym wyjściu.

Example

[jerry]$ awk --help

Wykonując ten kod, otrzymasz następujący wynik -

Output

Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options : GNU long options: (standard)
   -f progfile                --file=progfile
   -F fs                      --field-separator=fs
   -v var=val                 --assign=var=val
Short options : GNU long options: (extensions)
   -b                         --characters-as-bytes
   -c                         --traditional
   -C                         --copyright
   -d[file]                   --dump-variables[=file]
   -e 'program-text'          --source='program-text'
   -E file                    --exec=file
   -g                         --gen-pot
   -h                         --help
   -L [fatal]                 --lint[=fatal]
   -n                         --non-decimal-data
   -N                         --use-lc-numeric
   -O                         --optimize
   -p[file]                   --profile[=file]
   -P                         --posix
   -r                         --re-interval
   -S                         --sandbox
   -t                         --lint-old
   -V                         --version

Opcja --lint [= fatal]

Ta opcja umożliwia sprawdzanie nieprzenośnych lub wątpliwych konstrukcji. Kiedy kłótniafataljest dostępny, traktuje komunikaty ostrzegawcze jako błędy. Poniższy przykład demonstruje to -

Example

[jerry]$ awk --lint '' /bin/ls

Wykonując ten kod, otrzymasz następujący wynik -

Output

awk: cmd. line:1: warning: empty program text on command line
awk: cmd. line:1: warning: source file does not end in newline
awk: warning: no program text at all!

Opcja --posix

Ta opcja włącza ścisłą zgodność z POSIX, w której wszystkie popularne i specyficzne dla gawk rozszerzenia są wyłączone.

Opcja --profile [= plik]

Ta opcja generuje ładnie wydrukowaną wersję programu w pliku. Plik domyślny toawkprof.out. Poniżej prosty przykład ilustruje to -

Example

[jerry]$ awk --profile 'BEGIN{printf"---|Header|--\n"} {print} END{printf"---|Footer|---\n"}' marks.txt > /dev/null [jerry]$ cat awkprof.out

Wykonując ten kod, otrzymasz następujący wynik -

Output

# gawk profile, created Sun Oct 26 19:50:48 2014

   # BEGIN block(s)

   BEGIN {
      printf "---|Header|--\n"
   }

   # Rule(s) {
      print $0
   }

   # END block(s)

   END {
      printf "---|Footer|---\n"
   }

Opcja --traditional

Ta opcja wyłącza wszystkie rozszerzenia specyficzne dla gawk.

Opcja --version

Ta opcja wyświetla informacje o wersji programu AWK.

Example

[jerry]$ awk --version

Kiedy ten kod jest wykonywany, daje następujący wynik -

Output

GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.

W tym rozdziale opisano kilka przydatnych poleceń AWK i ich odpowiednie przykłady. Rozważ plik tekstowymarks.txt do przetworzenia z następującą zawartością -

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

Drukowanie kolumny lub pola

Możesz poinstruować AWK, aby drukował tylko określone kolumny z pola wejściowego. Poniższy przykład demonstruje to -

Przykład

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Physics   80
Maths     90
Biology   87
English   85
History   89

W pliku marks.txttrzecia kolumna zawiera nazwę przedmiotu, a czwarta - oceny uzyskane z danego przedmiotu. Wydrukujmy te dwie kolumny za pomocą polecenia drukowania AWK. W powyższym przykładzie$3 and $4 reprezentują odpowiednio trzecie i czwarte pole z rekordu wejściowego.

Drukowanie wszystkich linii

Domyślnie AWK drukuje wszystkie linie pasujące do wzorca.

Przykład

[jerry]$ awk '/a/ {print $0}' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

W powyższym przykładzie szukamy wzorca formularza a. Gdy dopasowanie do wzorca powiedzie się, wykonuje polecenie z bloku treści. W przypadku braku bloku treści - podejmowana jest domyślna akcja, jaką jest wydrukowanie rekordu. W związku z tym następujące polecenie daje ten sam wynik -

Przykład

[jerry]$ awk '/a/' marks.txt

Drukowanie kolumn według wzoru

Kiedy dopasowanie wzorca powiedzie się, AWK domyślnie drukuje cały rekord. Ale możesz poinstruować AWK, aby drukował tylko określone pola. Na przykład poniższy przykład drukuje trzecie i czwarte pole, gdy dopasowanie wzorca powiedzie się.

Przykład

[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Maths    90
Biology  87
English  85
History  89

Drukowanie kolumn w dowolnej kolejności

Możesz drukować kolumny w dowolnej kolejności. Na przykład poniższy przykład drukuje czwartą kolumnę, po której następuje trzecia kolumna.

Przykład

[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt

Wykonując powyższy kod, otrzymasz następujący wynik -

Wynik

90   Maths
87   Biology
85   English
89   History

Liczenie i drukowanie dopasowanego wzoru

Zobaczmy przykład, w którym możesz policzyć i wydrukować liczbę wierszy, dla których dopasowanie wzorca się powiodło.

Przykład

[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Count = 4

W tym przykładzie zwiększamy wartość licznika, gdy dopasowanie wzorca się powiedzie i drukujemy tę wartość w bloku END. Zauważ, że w przeciwieństwie do innych języków programowania, nie ma potrzeby deklarowania zmiennej przed jej użyciem.

Drukowanie linii zawierających więcej niż 18 znaków

Wydrukujmy tylko te wiersze, które zawierają więcej niż 18 znaków.

Przykład

[jerry]$ awk 'length($0) > 18' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

3) Shyam   Biology   87
4) Kedar   English   85

AWK zapewnia wbudowany length funkcja, która zwraca długość ciągu. $0zmienna przechowuje całą linię i przy braku bloku treści podejmowana jest akcja domyślna, tj. akcja print. W związku z tym, jeśli wiersz ma więcej niż 18 znaków, to porównanie daje wynik prawda i wiersz jest drukowany.

AWK zapewnia kilka wbudowanych zmiennych. Odgrywają ważną rolę podczas pisania skryptów AWK. Ten rozdział demonstruje użycie wbudowanych zmiennych.

Standardowe zmienne AWK

Standardowe zmienne AWK omówiono poniżej.

ARGC

Implikuje liczbę argumentów podanych w wierszu poleceń.

Example

[jerry]$ awk 'BEGIN {print "Arguments =", ARGC}' One Two Three Four

Wykonując ten kod, otrzymasz następujący wynik -

Output

Arguments = 5

Ale dlaczego AWK pokazuje 5, skoro przekazałeś tylko 4 argumenty? Po prostu sprawdź poniższy przykład, aby rozwiać wątpliwości.

ARGV

Jest to tablica przechowująca argumenty wiersza poleceń. Prawidłowy indeks tablicy mieści się w zakresie od 0 do ARGC-1.

Example

[jerry]$ awk 'BEGIN { 
   for (i = 0; i < ARGC - 1; ++i) { 
      printf "ARGV[%d] = %s\n", i, ARGV[i] 
   } 
}' one two three four

Wykonując ten kod, otrzymasz następujący wynik -

Output

ARGV[0] = awk
ARGV[1] = one
ARGV[2] = two
ARGV[3] = three

CONVFMT

Reprezentuje format konwersji liczb. Jego domyślną wartością jest%.6g.

Example

[jerry]$ awk 'BEGIN { print "Conversion Format =", CONVFMT }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Conversion Format = %.6g

OTACZAĆ

Jest to asocjacyjna tablica zmiennych środowiskowych.

Example

[jerry]$ awk 'BEGIN { print ENVIRON["USER"] }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

jerry

Aby znaleźć nazwy innych zmiennych środowiskowych, użyj env Komenda.

NAZWA PLIKU

Reprezentuje aktualną nazwę pliku.

Example

[jerry]$ awk 'END {print FILENAME}' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Output

marks.txt

Zwróć uwagę, że FILENAME jest niezdefiniowany w bloku BEGIN.

FS

Reprezentuje (wejściowy) separator pól, a jego domyślną wartością jest spacja. Możesz to również zmienić za pomocą-F opcja wiersza poleceń.

Example

[jerry]$ awk 'BEGIN {print "FS = " FS}' | cat -vte

Wykonując ten kod, otrzymasz następujący wynik -

Output

FS =  $

NF

Reprezentuje liczbę pól w bieżącym rekordzie. Na przykład poniższy przykład drukuje tylko te wiersze, które zawierają więcej niż dwa pola.

Example

[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NF > 2'

Wykonując ten kod, otrzymasz następujący wynik -

Output

One Two Three
One Two Three Four

NR

Reprezentuje numer bieżącego rekordu. Na przykład poniższy przykład drukuje rekord, jeśli bieżący numer rekordu jest mniejszy niż trzy.

Example

[jerry]$ echo -e "One Two\nOne Two Three\nOne Two Three Four" | awk 'NR < 3'

Wykonując ten kod, otrzymasz następujący wynik -

Output

One Two
One Two Three

FNR

Jest podobny do NR, ale w stosunku do bieżącego pliku. Jest to przydatne, gdy AWK działa na wielu plikach. Wartość FNR resetuje się z nowym plikiem.

OFMT

Reprezentuje numer formatu wyjściowego, a jego domyślną wartością jest %.6g.

Example

[jerry]$ awk 'BEGIN {print "OFMT = " OFMT}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

OFMT = %.6g

OFS

Reprezentuje separator pól wyjściowych, a jego domyślną wartością jest spacja.

Example

[jerry]$ awk 'BEGIN {print "OFS = " OFS}' | cat -vte

Wykonując ten kod, otrzymasz następujący wynik -

Output

OFS =  $

ORS

Reprezentuje separator rekordów wyjściowych, a jego domyślną wartością jest znak nowej linii.

Example

[jerry]$ awk 'BEGIN {print "ORS = " ORS}' | cat -vte

Wykonując powyższy kod, otrzymasz następujący wynik -

Output

ORS = $
$

RLENGTH

Reprezentuje długość ciągu dopasowanego przez matchfunkcjonować. Funkcja dopasowania AWK wyszukuje podany ciąg w ciągu wejściowym.

Example

[jerry]$ awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

2

RS

Reprezentuje (wejściowy) separator rekordów, a jego domyślną wartością jest znak nowej linii.

Example

[jerry]$ awk 'BEGIN {print "RS = " RS}' | cat -vte

Wykonując ten kod, otrzymasz następujący wynik -

Output

RS = $
$

RSTART

Reprezentuje pierwszą pozycję w ciągu dopasowanym przez match funkcjonować.

Example

[jerry]$ awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

9

SUBSEP

Reprezentuje znak separatora dla indeksów tablicy, a jego domyślną wartością jest \034.

Example

[jerry]$ awk 'BEGIN { print "SUBSEP = " SUBSEP }' | cat -vte

Wykonując ten kod, otrzymasz następujący wynik -

Output

SUBSEP = ^\$

0 USD

Reprezentuje cały rekord wejściowy.

Example

[jerry]$ awk '{print $0}' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Output

1) Amit     Physics   80
2) Rahul    Maths     90
3) Shyam    Biology   87
4) Kedar    English   85
5) Hari     History   89

$ n

Reprezentuje n- te pole w bieżącym rekordzie, w którym pola są oddzielone FS.

Example

[jerry]$ awk '{print $3 "\t" $4}' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Output

Physics   80
Maths     90
Biology   87
English   85
History   89

Zmienne specyficzne dla GNU AWK

Zmienne specyficzne dla GNU AWK są następujące -

ARGIND

Reprezentuje indeks w ARGV aktualnie przetwarzanego pliku.

Example

[jerry]$ awk '{ 
   print "ARGIND   = ", ARGIND; print "Filename = ", ARGV[ARGIND] 
}' junk1 junk2 junk3

Wykonując ten kod, otrzymasz następujący wynik -

Output

ARGIND   =  1
Filename =  junk1
ARGIND   =  2
Filename =  junk2
ARGIND   =  3
Filename =  junk3

BINMODE

Służy do określania trybu binarnego dla wszystkich plików we / wy w systemach innych niż POSIX. Wartości liczbowe 1, 2 lub 3 określają, że pliki wejściowe, pliki wyjściowe lub wszystkie pliki, odpowiednio, powinny używać binarnych operacji we / wy. Wartości ciągówr lub wokreśl, że odpowiednio pliki wejściowe lub wyjściowe powinny używać binarnych operacji we / wy. Wartości ciągówrw lub wr określ, że wszystkie pliki powinny używać binarnych operacji we / wy.

ERRNO

Ciąg znaków wskazuje błąd, gdy przekierowanie kończy się niepowodzeniem getline albo jeśli close połączenie kończy się niepowodzeniem.

Example

[jerry]$ awk 'BEGIN { ret = getline < "junk.txt"; if (ret == -1) print "Error:", ERRNO }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Error: No such file or directory

POLA SZEROKOŚCI

Ustawiana jest rozdzielana spacjami lista zmiennych szerokości pól, GAWK przetwarza dane wejściowe na pola o stałej szerokości, zamiast używać wartości zmiennej FS jako separatora pól.

IGNORECASE

Gdy ta zmienna jest ustawiona, w GAWK nie jest rozróżniana wielkość liter. Poniższy przykład demonstruje to -

Example

[jerry]$ awk 'BEGIN{IGNORECASE = 1} /amit/' marks.txt

Wykonując ten kod, otrzymasz następujący wynik -

Output

1) Amit  Physics   80

SZARPIE

Zapewnia dynamiczną kontrolę nad --lintopcja z programu GAWK. Gdy ta zmienna jest ustawiona, GAWK wyświetla ostrzeżenia o kłaczkach. Po przypisaniu krytycznej wartości ciągu, ostrzeżenia lint stają się błędami krytycznymi, dokładnie tak, jak--lint=fatal.

Example

[jerry]$ awk 'BEGIN {LINT = 1; a}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

awk: cmd. line:1: warning: reference to uninitialized variable `a'
awk: cmd. line:1: warning: statement has no effect

PROCINFO

Jest to tablica asocjacyjna zawierająca informacje o procesie, takie jak rzeczywiste i efektywne numery UID, numer identyfikacyjny procesu itd.

Example

[jerry]$ awk 'BEGIN { print PROCINFO["pid"] }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

4316

TEXTDOMAIN

Reprezentuje domenę tekstową programu AWK. Służy do znajdowania zlokalizowanych tłumaczeń ciągów programu.

Example

[jerry]$ awk 'BEGIN { print TEXTDOMAIN }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

messages

Powyższe dane wyjściowe pokazują tekst w języku angielskim z powodu en_IN widownia

Podobnie jak inne języki programowania, AWK zapewnia również duży zestaw operatorów. Ten rozdział wyjaśnia operatory AWK z odpowiednimi przykładami.

S.No. Operatorzy i opis
1 Operatory arytmetyczne

AWK obsługuje następujące operatory arytmetyczne.

2 Operatory inkrementacji i dekrementacji

AWK obsługuje następujące operatory inkrementacji i dekrementacji.

3 Operatory przypisania

AWK obsługuje następujące operatory przypisania.

4 Operatorzy relacyjni

AWK obsługuje następujące operatory relacyjne.

5 Operatory logiczne

AWK obsługuje następujące operatory logiczne.

6 Operator trójskładnikowy

Możemy łatwo zaimplementować wyrażenie warunku za pomocą operatora trójskładnikowego.

7 Operatory jednoargumentowe

AWK obsługuje następujące operatory jednoargumentowe.

8 Operatory wykładnicze

Istnieją dwa formaty operatorów wykładniczych.

9 Operator konkatenacji ciągów

Spacja to operator konkatenacji ciągów, który łączy dwa ciągi.

10 Operator członkostwa tablicy

Jest reprezentowany przez in. Jest używany podczas uzyskiwania dostępu do elementów tablicy.

11 Operatory wyrażeń regularnych

W tym przykładzie wyjaśniono dwie formy operatorów wyrażeń regularnych.

AWK jest bardzo potężnym i wydajnym narzędziem do obsługi wyrażeń regularnych. Wiele złożonych zadań można rozwiązać za pomocą prostych wyrażeń regularnych. Każdy ekspert od wiersza poleceń zna moc wyrażeń regularnych.

W tym rozdziale omówiono standardowe wyrażenia regularne wraz z odpowiednimi przykładami.

Kropka

Dopasowuje każdy pojedynczy znak z wyjątkiem znaku końca wiersza. Na przykład pasuje następujący przykładfin, fun, fan itp.

Przykład

[jerry]$ echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'

Wykonując powyższy kod, otrzymasz następujący wynik -

Wynik

fun
fin
fan

Początek linii

Pasuje do początku linii. Na przykład poniższy przykład wyświetla wszystkie linie zaczynające się od wzorcaThe.

Przykład

[jerry]$ echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

There
Their

Koniec linii

Pasuje do końca linii. Na przykład poniższy przykład drukuje wiersze kończące się literąn.

Przykład

[jerry]$ echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'

Wynik

Wykonując ten kod, otrzymasz następujący wynik -

fun
fin
fan

Dopasuj zestaw znaków

Służy do dopasowania tylko jednego z kilku znaków. Na przykład poniższy przykład pasuje do wzorcaCall i Tall ale nie Ball.

Przykład

[jerry]$ echo -e "Call\nTall\nBall" | awk '/[CT]all/'

Wynik

Wykonując ten kod, otrzymasz następujący wynik -

Call
Tall

Ekskluzywny zestaw

W zestawie ekskluzywnym karat neguje zestaw znaków w nawiasach kwadratowych. Na przykład poniższy przykład drukuje tylkoBall.

Przykład

[jerry]$ echo -e "Call\nTall\nBall" | awk '/[^CT]all/'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Ball

Zmiana

Pionowa kreska umożliwia logiczny OR na wyrażeniach regularnych. Na przykład następujący przykład drukujeBall i Call.

Przykład

[jerry]$ echo -e "Call\nTall\nBall\nSmall\nShall" | awk '/Call|Ball/'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Call
Ball

Zero lub jedno wystąpienie

Dopasowuje zero lub jedno wystąpienie poprzedniego znaku. Na przykład pasuje następujący przykładColour jak również Color. Zrobiliśmyu jako znak opcjonalny przy użyciu ?.

Przykład

[jerry]$ echo -e "Colour\nColor" | awk '/Colou?r/'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Colour
Color

Zero lub więcej wystąpień

Dopasowuje zero lub więcej wystąpień poprzedniego znaku. Na przykład pasuje następujący przykładca, cat, catt, i tak dalej.

Przykład

[jerry]$ echo -e "ca\ncat\ncatt" | awk '/cat*/'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

ca
cat
catt

Jedno lub więcej wystąpień

Dopasowuje jedno lub więcej wystąpień poprzedzającego znaku. Na przykład poniższy przykład dopasowuje jedno lub więcej wystąpień2.

Przykład

[jerry]$ echo -e "111\n22\n123\n234\n456\n222"  | awk '/2+/'

Wykonując powyższy kod, otrzymasz następujący wynik -

Wynik

22
123
234
222

Grupowanie

Parentheses ()służą do grupowania i znaku | jest używany do alternatyw. Na przykład następujące wyrażenie regularne dopasowuje wiersze zawierające alboApple Juice or Apple Cake.

Przykład

[jerry]$ echo -e "Apple Juice\nApple Pie\nApple Tart\nApple Cake" | awk 
   '/Apple (Juice|Cake)/'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Apple Juice
Apple Cake

AWK ma tablice asocjacyjne, a jedną z najlepszych rzeczy jest to, że indeksy nie muszą być ciągłym zbiorem liczb; możesz użyć łańcucha lub liczby jako indeksu tablicy. Nie ma również potrzeby wcześniejszego deklarowania rozmiaru tablicy - tablice mogą się rozszerzać / zmniejszać w czasie wykonywania.

Jego składnia jest następująca -

Składnia

array_name[index] = value

Gdzie array_name to nazwa tablicy, index jest indeksem tablicy, a value jest dowolną wartością przypisaną do elementu tablicy.

Tworzenie tablicy

Aby uzyskać lepszy wgląd w tablicę, stwórzmy elementy tablicy i uzyskaj do nich dostęp.

Przykład

[jerry]$ awk 'BEGIN {
   fruits["mango"] = "yellow";
   fruits["orange"] = "orange"
   print fruits["orange"] "\n" fruits["mango"]
}'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

orange
yellow

W powyższym przykładzie deklarujemy tablicę jako fruitsktórego indeksem jest nazwa owocu, a wartością jest kolor owocu. Aby uzyskać dostęp do elementów tablicy, używamyarray_name[index] format.

Usuwanie elementów tablicy

Do wstawienia użyliśmy operatora przypisania. Podobnie możemy użyćdeleteinstrukcja, aby usunąć element z tablicy. Składnia instrukcji delete jest następująca -

Składnia

delete array_name[index]

Poniższy przykład usuwa element orange. Dlatego polecenie nie wyświetla żadnych danych wyjściowych.

Przykład

[jerry]$ awk 'BEGIN {
   fruits["mango"] = "yellow";
   fruits["orange"] = "orange";
   delete fruits["orange"];
   print fruits["orange"]
}'

Tablice wielowymiarowe

AWK obsługuje tylko tablice jednowymiarowe. Ale możesz łatwo zasymulować tablicę wielowymiarową, używając samej tablicy jednowymiarowej.

Na przykład poniżej przedstawiono dwuwymiarową tablicę 3x3 -

100   200   300
400   500   600
700   800   900

W powyższym przykładzie tablica [0] [0] przechowuje 100, tablica [0] [1] przechowuje 200 i tak dalej. Aby zapisać 100 w lokalizacji tablicy [0] [0], możemy użyć następującej składni -

Składnia

array["0,0"] = 100

Chociaż daliśmy 0,0jako indeks nie są to dwa indeksy. W rzeczywistości jest to tylko jeden indeks ze stringiem0,0.

Poniższy przykład symuluje tablicę 2-w -

Przykład

[jerry]$ awk 'BEGIN {
   array["0,0"] = 100;
   array["0,1"] = 200;
   array["0,2"] = 300;
   array["1,0"] = 400;
   array["1,1"] = 500;
   array["1,2"] = 600;

   # print array elements
   print "array[0,0] = " array["0,0"];
   print "array[0,1] = " array["0,1"];
   print "array[0,2] = " array["0,2"];
   print "array[1,0] = " array["1,0"];
   print "array[1,1] = " array["1,1"];
   print "array[1,2] = " array["1,2"];
}'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

array[0,0] = 100
array[0,1] = 200
array[0,2] = 300
array[1,0] = 400
array[1,1] = 500
array[1,2] = 600

Możesz także wykonywać różne operacje na tablicy, takie jak sortowanie jej elementów / indeksów. W tym celu możesz użyćassort i asorti Funkcje

Podobnie jak inne języki programowania, AWK udostępnia instrukcje warunkowe do sterowania przepływem programu. W tym rozdziale wyjaśniono instrukcje sterujące AWK z odpowiednimi przykładami.

Jeśli oświadczenie

Po prostu testuje stan i wykonuje określone czynności w zależności od stanu. Poniżej podano składnięif oświadczenie -

Składnia

if (condition)
   action

Możemy również użyć pary nawiasów klamrowych, jak podano poniżej, aby wykonać wiele akcji -

Składnia

if (condition) {
   action-1
   action-1
   .
   .
   action-n
}

Na przykład poniższy przykład sprawdza, czy liczba jest parzysta, czy nie -

Przykład

[jerry]$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d is even number.\n", num }'

Wykonując powyższy kod, otrzymasz następujący wynik -

Wynik

10 is even number.

Instrukcja If Else

W if-else składni, możemy podać listę działań do wykonania, gdy warunek stanie się fałszywy.

Składnia if-else oświadczenie jest następujące -

Składnia

if (condition)
   action-1
else
   action-2

W powyższej składni akcja-1 jest wykonywana, gdy warunek ma wartość true, a akcja-2 jest wykonywana, gdy warunek ma wartość fałsz. Na przykład poniższy przykład sprawdza, czy liczba jest parzysta, czy nie -

Przykład

[jerry]$ awk 'BEGIN {
   num = 11; if (num % 2 == 0) printf "%d is even number.\n", num; 
      else printf "%d is odd number.\n", num 
}'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

11 is odd number.

Jeśli-Inaczej-Jeśli drabina

Możemy łatwo stworzyć plik if-else-if drabina za pomocą wielu if-elsesprawozdania. Poniższy przykład demonstruje to -

Przykład

[jerry]$ awk 'BEGIN {
   a = 30;
   
   if (a==10)
   print "a = 10";
   else if (a == 20)
   print "a = 20";
   else if (a == 30)
   print "a = 30";
}'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

a = 30

Ten rozdział wyjaśnia pętle AWK na odpowiednim przykładzie. Pętle służą do powtarzalnego wykonywania zestawu działań. Wykonywanie pętli trwa tak długo, jak długo warunek pętli jest spełniony.

Dla pętli

Składnia for pętla to -

Składnia

for (initialization; condition; increment/decrement)
   action

Początkowo forinstrukcja wykonuje akcję inicjalizacyjną, a następnie sprawdza warunek. Jeśli warunek jest prawdziwy, wykonuje akcje, a następnie wykonuje operacje zwiększania lub zmniejszania. Wykonywanie pętli trwa tak długo, jak długo warunek jest spełniony. Na przykład poniższy przykład wyświetla od 1 do 5 przy użyciufor pętla -

Przykład

[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

1
2
3
4
5

While Loop

Plik whilepętla wykonuje akcję, dopóki określony warunek logiczny nie uzyska wartości true. Oto składniawhile pętla -

Składnia

while (condition)
   action

AWK najpierw sprawdza stan; jeśli warunek jest prawdziwy, wykonuje akcję. Ten proces powtarza się, dopóki warunek pętli zostanie uznany za prawdziwy. Na przykład poniższy przykład wyświetla od 1 do 5 przy użyciuwhile pętla -

Przykład

[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

1
2
3
4
5

Pętla Do-While

Plik do-whilepętla jest podobna do pętli while, z tą różnicą, że warunek testu jest oceniany na końcu pętli. Oto składniado-whilepętla -

Składnia

do
   action
while (condition)

W do-whileinstrukcja akcji jest wykonywana co najmniej raz, nawet jeśli wynikiem instrukcji warunku jest fałsz. Na przykład poniższy przykład wyświetla od 1 do 5 liczb przy użyciudo-while pętla -

Przykład

[jerry]$ awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

1
2
3
4
5

Instrukcja Break

Jak sama nazwa wskazuje, służy do zakończenia wykonywania pętli. Oto przykład, który kończy pętlę, gdy suma przekroczy 50.

Przykład

[jerry]$ awk 'BEGIN {
   sum = 0; for (i = 0; i < 20; ++i) { 
      sum += i; if (sum > 50) break; else print "Sum =", sum 
   } 
}'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45

Instrukcja Continue

Plik continueinstrukcja jest używana wewnątrz pętli, aby przejść do następnej iteracji pętli. Jest to przydatne, gdy chcesz pominąć przetwarzanie niektórych danych wewnątrz pętli. Na przykład w poniższym przykładzie użytocontinue instrukcja, aby wydrukować liczby parzyste od 1 do 20.

Przykład

[jerry]$ awk 'BEGIN {
   for (i = 1; i <= 20; ++i) {
      if (i % 2 == 0) print i ; else continue
   } 
}'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

2
4
6
8
10
12
14
16
18
20

Exit Statement

Służy do zatrzymania wykonywania skryptu. Przyjmuje liczbę całkowitą jako argument, który jest kodem statusu wyjścia dla procesu AWK. Jeśli nie podano argumentu,exitzwraca stan zero. Oto przykład, który zatrzymuje wykonanie, gdy suma przekroczy 50.

Przykład

[jerry]$ awk 'BEGIN {
   sum = 0; for (i = 0; i < 20; ++i) {
      sum += i; if (sum > 50) exit(10); else print "Sum =", sum 
   } 
}'

Wynik

Wykonując ten kod, otrzymasz następujący wynik -

Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45

Sprawdźmy status zwrotu skryptu.

Przykład

[jerry]$ echo $?

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

10

AWK ma wiele wbudowanych funkcji, które są zawsze dostępne dla programisty. W tym rozdziale opisano arytmetykę, ciąg znaków, czas, operacje na bitach i inne różne funkcje wraz z odpowiednimi przykładami.

S.No. Wbudowane funkcje i opis
1 Funkcje arytmetyczne

AWK ma następujące wbudowane funkcje arytmetyczne.

2 Funkcje łańcuchowe

AWK ma następujące wbudowane funkcje String.

3 Funkcje czasu

AWK ma następujące wbudowane funkcje czasu.

4 Funkcje manipulacji bitami

AWK ma następujące wbudowane funkcje manipulacji bitami.

5 Różne funkcje

AWK ma następujące różne funkcje.

Funkcje to podstawowe elementy składowe programu. AWK pozwala nam definiować własne funkcje. Duży program można podzielić na funkcje, a każdą funkcję można napisać / przetestować niezależnie. Zapewnia możliwość ponownego użycia kodu.

Poniżej podano ogólny format funkcji zdefiniowanej przez użytkownika -

Składnia

function function_name(argument1, argument2, ...) { 
   function body
}

W tej składni function_nameto nazwa funkcji zdefiniowanej przez użytkownika. Nazwa funkcji powinna zaczynać się od litery, a pozostałe znaki mogą być dowolną kombinacją cyfr, znaków alfabetu lub podkreślenia. Słowa rezerwowe AWK nie mogą być używane jako nazwy funkcji.

Funkcje mogą przyjmować wiele argumentów oddzielonych przecinkami. Argumenty nie są obowiązkowe. Możesz także utworzyć funkcję zdefiniowaną przez użytkownika bez żadnego argumentu.

function body składa się z co najmniej jednej instrukcji AWK.

Napiszmy dwie funkcje, które obliczają minimalną i maksymalną liczbę i wywołajmy te funkcje z innej funkcji o nazwie main. Plikfunctions.awk plik zawiera -

Przykład

# Returns minimum number
function find_min(num1, num2){
   if (num1 < num2)
   return num1
   return num2
}
# Returns maximum number
function find_max(num1, num2){
   if (num1 > num2)
   return num1
   return num2
}
# Main function
function main(num1, num2){
   # Find minimum number
   result = find_min(10, 20)
   print "Minimum =", result
  
   # Find maximum number
   result = find_max(10, 20)
   print "Maximum =", result
}
# Script execution starts here
BEGIN {
   main(10, 20)
}

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Minimum = 10
Maximum = 20

Do tej pory wyświetlaliśmy dane na standardowym strumieniu wyjściowym. Możemy również przekierować dane do pliku. Przekierowanie pojawia się poprint lub printfkomunikat. Przekierowania w AWK są zapisywane tak samo jak przekierowania w poleceniach powłoki, z wyjątkiem tego, że są napisane wewnątrz programu AWK. W tym rozdziale wyjaśniono przekierowanie z odpowiednimi przykładami.

Operator przekierowania

Składnia operatora przekierowania to -

Składnia

print DATA > output-file

Zapisuje dane w output-file. Jeśli plik wyjściowy nie istnieje, tworzy go. Gdy używany jest ten typ przekierowania, plik wyjściowy jest kasowany przed zapisaniem do niego pierwszego wyjścia. Kolejne operacje zapisu do tego samego pliku wyjściowego nie usuwają pliku wyjściowego, ale dołączają do niego. Na przykład poniższy przykład piszeHello, World !!! do pliku.

Utwórzmy plik z danymi tekstowymi.

Przykład

[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Old data

Teraz przekierujmy do niego część zawartości za pomocą operatora przekierowania AWK.

Przykład

[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Hello, World !!!

Dołącz operator

Składnia operatora dołączania jest następująca -

Składnia

print DATA >> output-file

Dołącza dane do pliku output-file. Jeśli plik wyjściowy nie istnieje, tworzy go. W przypadku korzystania z tego typu przekierowania nowa zawartość jest dodawana na końcu pliku. Na przykład następujący przykład dołączaHello, World !!! do pliku.

Utwórzmy plik z danymi tekstowymi.

Przykład

[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Old data

Teraz dołączmy do niego trochę zawartości za pomocą operatora append AWK.

Przykład

[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }' [jerry]$ cat /tmp/message.txt

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Old data
Hello, World !!!

Rura

Możliwe jest wysłanie wyjścia do innego programu przez potok zamiast korzystania z pliku. To przekierowanie otwiera potok do polecenia i zapisuje wartości elementów przez ten potok do innego procesu w celu wykonania polecenia. Polecenie argumentu przekierowania jest w rzeczywistości wyrażeniem AWK. Oto składnia potoku -

Składnia

print items | command

Użyjmy tr polecenie do konwersji małych liter na wielkie.

Przykład

[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

HELLO, WORLD !!!

Dwukierunkowa komunikacja

AWK może komunikować się z procesem zewnętrznym za pomocą |&, czyli komunikacja dwukierunkowa. Na przykład w poniższym przykładzie użytotrpolecenie do konwersji małych liter na wielkie. Naszcommand.awk plik zawiera -

Przykład

BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   close(cmd, "to")
   
   cmd |& getline out
   print out;
   close(cmd);
}

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

HELLO, WORLD !!!

Czy skrypt wygląda tajemniczo? Pozwól nam to zdemistyfikować.

  • Pierwsze stwierdzenie, cmd = "tr [a-z] [A-Z]", to polecenie, do którego nawiązujemy dwukierunkową komunikację z AWK.

  • Następna instrukcja, tj. Polecenie print zapewnia dane wejściowe do trKomenda. Tutaj&| oznacza komunikację dwukierunkową.

  • Trzecie stwierdzenie, tj. close(cmd, "to"), zamyka to proces po jego wykonaniu.

  • Następna wypowiedź cmd |& getline out przechowuje output do zmiennej out za pomocą funkcji getline.

  • Następna instrukcja print drukuje dane wyjściowe, a na końcu close funkcja zamyka polecenie.

Do tej pory używaliśmy AWK print i printffunkcje do wyświetlania danych na standardowym wyjściu. Ale printf jest znacznie potężniejszy niż to, co widzieliśmy wcześniej. Ta funkcja jest zapożyczona z języka C i jest bardzo pomocna podczas tworzenia sformatowanych wyników. Poniżej znajduje się składnia instrukcji printf -

Składnia

printf fmt, expr-list

W powyższej składni fmt jest ciągiem specyfikacji formatu i stałych. expr-list jest listą argumentów odpowiadających specyfikatorom formatu.

Sekwencje ewakuacyjne

Podobnie jak każdy ciąg, format może zawierać osadzone sekwencje specjalne. Poniżej omówione są sekwencje ucieczki obsługiwane przez AWK -

Nowa linia

Poniższy przykład drukuje Hello i World w osobnych wierszach przy użyciu znaku nowej linii -

Example

[jerry]$ awk 'BEGIN { printf "Hello\nWorld\n" }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Hello
World

Tabulator poziomy

W poniższym przykładzie zastosowano tabulator poziomy do wyświetlenia innego pola

Example

[jerry]$ awk 'BEGIN { printf "Sr No\tName\tSub\tMarks\n" }'

Wykonując powyższy kod, otrzymasz następujący wynik -

Output

Sr No   Name    Sub Marks

Tabulator pionowy

W poniższym przykładzie zastosowano tabulator pionowy po każdym polu -

Example

[jerry]$ awk 'BEGIN { printf "Sr No\vName\vSub\vMarks\n" }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Sr No
   Name
      Sub
         Marks

Backspace

Poniższy przykład drukuje znak Backspace po każdym polu oprócz ostatniego. Usuwa ostatnią liczbę z pierwszych trzech pól. Na przykład,Field 1 jest wyświetlany jako Field, ponieważ ostatni znak jest usuwany za pomocą klawisza Backspace. Jednak ostatnie poleField 4 jest wyświetlany tak, jak jest, ponieważ nie mieliśmy pliku \b po Field 4.

Example

[jerry]$ awk 'BEGIN { printf "Field 1\bField 2\bField 3\bField 4\n" }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Field Field Field Field 4

Powrót karetki

W poniższym przykładzie po wydrukowaniu każdego pola wykonujemy plik Carriage Return i wydrukuj następną wartość nad bieżącą drukowaną wartością. Oznacza to, że w ostatecznym wyniku możesz zobaczyć tylkoField 4, ponieważ była to ostatnia rzecz do wydrukowania na wszystkich poprzednich polach.

Example

[jerry]$ awk 'BEGIN { printf "Field 1\rField 2\rField 3\rField 4\n" }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Field 4

Form Feed

Poniższy przykład wykorzystuje wysuw strony po wydrukowaniu każdego pola.

Example

[jerry]$ awk 'BEGIN { printf "Sr No\fName\fSub\fMarks\n" }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Sr No
   Name
      Sub
         Marks

Specyfikator formatu

Podobnie jak w języku C, AWK ma również specyfikatory formatu. Wersja AWK instrukcji printf akceptuje następujące formaty specyfikacji konwersji -

%do

Drukuje pojedynczy znak. Jeśli argument używany dla%cjest numeryczny, jest traktowany jako znak i drukowany. W przeciwnym razie przyjmuje się, że argument jest łańcuchem i drukowany jest jedyny pierwszy znak tego ciągu.

Example

[jerry]$ awk 'BEGIN { printf "ASCII value 65 = character %c\n", 65 }'

Output

Wykonując ten kod, otrzymasz następujący wynik -

ASCII value 65 = character A

% d i% i

Wyświetla tylko część całkowitą liczby dziesiętnej.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %d\n", 80.66 }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Percentags = 80

% e i% E

Wyświetla liczbę zmiennoprzecinkową w postaci [-] d.dddddde [+ -] dd.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %E\n", 80.66 }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Percentags = 8.066000e+01

Plik %E format używa E zamiast e.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %e\n", 80.66 }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Percentags = 8.066000E+01

%fa

Wyświetla liczbę zmiennoprzecinkową w postaci [-] ddd.dddddd.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %f\n", 80.66 }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Percentags = 80.660000

% g i% G

Używa konwersji% e lub% f, w zależności od tego, która z tych wartości jest krótsza, z pominięciem nieznaczących zer.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %g\n", 80.66 }'

Output

Wykonując ten kod, otrzymasz następujący wynik -

Percentags = 80.66

Plik %G format używa %E zamiast% e.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %G\n", 80.66 }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Percentags = 80.66

% o

Wyświetla liczbę ósemkową bez znaku.

Example

[jerry]$ awk 'BEGIN { printf "Octal representation of decimal number 10 = %o\n", 10}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Octal representation of decimal number 10 = 12

% u

Wyświetla liczbę dziesiętną bez znaku.

Example

[jerry]$ awk 'BEGIN { printf "Unsigned 10 = %u\n", 10 }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Unsigned 10 = 10

% s

Wyświetla ciąg znaków.

Example

[jerry]$ awk 'BEGIN { printf "Name = %s\n", "Sherlock Holmes" }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Name = Sherlock Holmes

% x i% X

Wyświetla liczbę szesnastkową bez znaku. Plik%X format używa wielkich liter zamiast małych.

Example

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %x\n", 15
}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Hexadecimal representation of decimal number 15 = f

Teraz użyjmy% X i obserwujmy wynik -

Example

[jerry]$ awk 'BEGIN { 
   printf "Hexadecimal representation of decimal number 15 = %X\n", 15
}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Hexadecimal representation of decimal number 15 = F

%%

Drukuje singiel % znak i żaden argument nie jest konwertowany.

Example

[jerry]$ awk 'BEGIN { printf "Percentags = %d%%\n", 80.66 }'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Percentags = 80%

Parametry opcjonalne z%

Z % możemy użyć następujących parametrów opcjonalnych -

Szerokość

Pole jest wypełnione do width. Domyślnie pole jest wypełnione spacjami, ale gdy używana jest flaga 0, jest wypełnione zerami.

Example

[jerry]$ awk 'BEGIN { 
   num1 = 10; num2 = 20; printf "Num1 = %10d\nNum2 = %10d\n", num1, num2 
}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Num1 =         10
Num2 =         20

Wiodące zera

Wiodące zero działa jak flaga, która wskazuje, że dane wyjściowe powinny być wypełnione zerami zamiast spacjami. Należy pamiętać, że ta flaga działa tylko wtedy, gdy pole jest szersze niż wartość do wydrukowania. Poniższy przykład opisuje to -

Example

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %05d\nNum2 = %05d\n", num1, num2 
}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Num1 = -0010
Num2 = 00020

Wyrównanie do lewej

Wyrażenie należy wyrównać do lewej w jego polu. Gdy ciąg wejściowy jest mniejszy niż liczba podanych znaków i chcesz, aby był wyrównany do lewej strony, tj. Dodając spacje po prawej stronie, użyj znaku minus (-) bezpośrednio po% i przed liczbą.

W poniższym przykładzie wynik polecenia AWK jest przesyłany potokiem do polecenia cat w celu wyświetlenia znaku END OF LINE ($).

Example

[jerry]$ awk 'BEGIN { num = 10; printf "Num = %-5d\n", num }' | cat -vte

Wykonując ten kod, otrzymasz następujący wynik -

Output

Num = 10   $

Znak prefiksu

Zawsze poprzedza wartości liczbowe znakiem, nawet jeśli wartość jest dodatnia.

Example

[jerry]$ awk 'BEGIN { 
   num1 = -10; num2 = 20; printf "Num1 = %+d\nNum2 = %+d\n", num1, num2 
}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Num1 = -10
Num2 = +20

Haszysz

Dla% o dostarcza wiodące zero. Dla% xi% X podaje początkowe 0x lub 0X, odpowiednio, tylko wtedy, gdy wynik jest różny od zera. Dla% e,% E,% f i% F wynik zawsze zawiera przecinek dziesiętny. W przypadku% g i% G końcowe zera nie są usuwane z wyniku. Poniższy przykład opisuje to -

Example

[jerry]$ awk 'BEGIN { 
   printf "Octal representation = %#o\nHexadecimal representaion = %#X\n", 10, 10
}'

Wykonując ten kod, otrzymasz następujący wynik -

Output

Octal representation = 012
Hexadecimal representation = 0XA