AWK - Tutorial
..:: Menu ::..
 :: Wprowadzenie
 :: Zaczynamy
 :: Formatowane wyjście
 :: Wyrażenia regularne
 :: Wbudowane zmienne
 :: Operatory i funkcje
 :: Instrukcje sterujące
 :: Tablice
 
 :: Przykłady
 :: Linki

Darmowe konta, domeny: of.pl
..:: Zaczynamy ::..

 

   Ten tutorial powstał na podstawie materiałów ... opracowanych na podstawie materiałów ... które powstały na podstawie orginalnych materiałów opracowanych przez: Brian Brown, CIT, 1994.

   Program napisany w awk składa sie ze wzorców oraz powiązanych z nimi akcji. Podczas intepretacji porównuje on kolejne linie z danymi wejściowymi i wykonuje odpowiednie akcje. Akcje są zamkniete w nawiasach klamrowych i odzielone średnikami:

wzorzec { akcja }

   awk wykorzystuje zmienne specjalne $0, $1, $2, itd.

$0 - aktualna linia wejściowa
$1 - pierwsze pole(wyraz) w lini
$2 - drugie pole w lini
itd.

   Domyślnie pola są rozdzielone spacjami lub tabulacjami. Dla przykładu, lina "Witaj piękny świecie" jest reprezentowana jako:

$0 - Witaj piękny świecie
$1 - Witaj
$2 - piękny
$3 - świecie

   Prosty program w awk:

{ print $0 }

   Powyższy przykład nie zawiera żadnych wzorców do porównania. W wyniku jego działania każda linia wejściowa zostanie wypisana na wyjściu

   Ten jednoliniowy program możemy zapisać w pliku (np "mojawk01") i wywołac go poleceniem:

awk -f mojawk01 /etc/group

awk wczyta polecenia z pliku "mojawk01" oraz dane z pliku "/etc/group" i wyświetli te dane na ekranie (analogicznie do polecenia "cat")

Aby wyswietlić tylko linie zawierajace wyraz "users" dodajemy wzorzec:

/users/ { print $0 }

Jeżeli chcemy wyswietlic tylko dwa pierwsze wyrazy:

/users/ { print $1, $2 }

Natomiast, aby przefiltrować wynik innego programu, wydajemy polecenie:

who | awk -f mojawk01

Możemy również dodać komentarz.
Komentarz zaczyna się od zanaku hash (#) a kończy wraz z końcem lini, np:

/users/ { print $1, $2 } #wyświetlenie tylko dwóch wyrazów

Nieprawidłowy jest natomiast zapis poniższy, ponieważ nawiasy klamrowe nie sa zamkniete:

/users/ { print $1, $2 #wyświetlenie tylko dwóch wyrazów }

awk jest dobrym programem do wydobywania danych z pilków "formularzy", tzn. plików, które zawierają dane ułozone w kolumnach oddzielonych np. spacjami.
Utwórzmy plik "awktekst":

  Type    Mem(Kb) Location Serial#   HDSize(Mb)
  XT      640     D402     MG0010    0
  386     2048    D403     MG0011    100
  486     4096    D404     MG0012    270
  386     8192    A423     CC0177    400
  486     8192    A424     CC0182    670
  286     4096    A423     CC0183    100
  286     4096    A425     CC0184    80
  Mac     4096    B407     EE1027    80
  Apple   4096    B406     EE1028    40
  68020   2048    B406     EE1029    80
  68030   2048    B410     EE1030    100
  $unix   16636   A405     CC0185    660
  "trs80" 64      Z101     EL0020    0

Aby wyświetlic jedynie linie gdzie Type == "386", zapisyjemy w pliku "mojawk02" polecenie:

$1 == "386" { print $0 }

Nastepnie wydajemy polecenie:

>awk -f mojawk02 awktekst

Na ekranie zobaczymy:

  386     2048    D403     MG0011    100
  386     8192    A423     CC0177    400

awk rozpoznaje następujace operatory porównania:

  <    mniejszy
  <=   mniejszy lub równy
  ==   równy
  !=   różny
  >=   większy lub równy
  >    większy
  ~    zawierający
  !~   nie zawierajacy

Przykład "mojawk03":

#mojawk03, program awk, który wyświetla komputery
#posiadające mniej niż 1024Kb pamięci
$2 < 1024 { print $0 }

Ekran:

>awk -f mojawk03 awktekst
  XT      640     D402     MG0010    0
  "trs80" 64      Z101     EL0020    0

Przykład "mojawk04":

#mojawk04, program awk, który wyświetla lokalizacje
#i numer seryjny komputerów typu 486
$1 == "486" { print $3, $4 }

Ekran:

>awk -f mojawk04 awktekst
  D404     MG0012
  A424     CC0182

Przykład "mojawk05":

#mojawk05, program awk, który wyświetla
#komputery należace do grupy MG
/MG/ { print $0 }

Ekran:

>awk -f mojawk05 awktekst
  XT      640     D402     MG0010    0
  386     2048    D403     MG0011    100
  486     4096    D404     MG0012    270

Przykład "mojawk06":

#mojawk06, program awk, który wyświetla
#komputery należace do grupy MG
#(wersja 2 - wyszukiwanie tylko w 4 kolumnie)
$4 ~ /MG/ { print $0 }

Ekran:

>awk -f mojawk06 awktekst
  XT      640     D402     MG0010    0
  386     2048    D403     MG0011    100
  486     4096    D404     MG0012    270

Przykład "mojawk07":

#mojawk07, program awk, który wyświetla komputery
#nie posiadające 4096Kb pamięci
$2 != "4096" { print $0 }

Ekran:

>awk -f mojawk07 awktekst
  XT      640     D402     MG0010    0
  386     2048    D403     MG0011    100
  386     8192    A423     CC0177    400
  486     8192    A424     CC0182    670
  68020   2048    B406     EE1029    80
  68030   2048    B410     EE1030    100
  $unix   16636   A405     CC0185    660
  "trs80" 64      Z101     EL0020    0

Valid XHTML 1.0 Transitional Valid CSS!   E-mail do webmastera: sgrzes@op.pl  © Grzegorz Sala 2005 DO GÓRY