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
..:: Wyrażenia regularne ::..

 

   awk rozpoznaje wyrażenia regularne analogiczne jak w programie "grep" czy innych poleceniach systemy Unix. Wyrażenia regularne są zawarte pomiedzy dwoma ukośnikami (/)

  /386/
  $1 ~ /386/

   W wyrażeniach regularnych następujace symbole mają specjalne znaczenie:

  \ ^ $ . [ ] * + ? ( ) |

  ^     pierwszy znak w napisie
  $     ostatni znak w napisie
  .     jeden znak w napisie
  [ ]   wybór znaków
  ( )   grupowanie
  |     alternatywa

Przykład "mojawk17":

#mojawk17, program awk wyświetlający komputery
#mające w nazwie cyfrę "8" lub "6"
$1 ~ /[86]/ { print $0 }

Ekran:

>awk -f mojawk17 awktekst
  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
  68020   2048    B406     EE1029    80
  68030   2048    B410     EE1030    100
  "trs80" 64      Z101     EL0020    0

   Jeżeli pierwszym znakiem po otwierającym nawiasie kwadratowym ([), jest "daszek" (^), oznacza to, że wyrazenie NIE ZAWIERA znaków wymienionych w nawiasie kwadratowym ([]).

Przykład "mojawk18":

#mojawk18, program awk, który wyświetla komputery
#zawierające w nazwie typu znaki różne od: "2","3","4","6","8"
$1 ~ /[^23468]/ { print $0 }

Ekran:

>awk -f mojawk18 awktekst
  XT      640     D402     MG0010    0
  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

Przykład "mojawk19":

#mojawk19, program awk, który wyświetla komputery
#zawierające w nazwie typu znaki: A-Z oraz a-z
$1 ~ /[a-zA-Z]/ { print $0 }

Ekran:

>awk -f mojawk19 awktekst
  XT      640     D402     MG0010    0
  Mac     4096    B407     EE1027    80
  Apple   4096    B406     EE1028    40
  $unix   16636   A405     CC0185    660
  "trs80" 64      Z101     EL0020    0

Przykład "mojawk20":

#mojawk20, program awk, który wyświetla komputery
#zawierające w opisie "386", lub "Mac" lub "XT"
/(386|Mac|XT)/ { print $0 }

Ekran:

>awk -f mojawk20 awktekst
  XT      640     D402     MG0010    0
  386     2048    D403     MG0011    100
  386     8192    A423     CC0177    400
  Mac     4096    B407     EE1027    80

   Jeżeli chcemy, aby znaki specjalne były iterpretowane jako zwykłe symbole, musimy je poprzedzić odwrotnym ukośnikiem (\)

Przykład "mojawk21":

#mojawk21, program awk, który wyświetla komputery
#zawierające w nazwie znak "$"
$1 ~ /[\$]/ { print $0 }

Ekran:

>awk -f mojawk21 awktekst
  $unix   16636   A405     CC0185    660

   Innym zastosowaniem odwrotnego ukośnika (\) jest reprezentacja znaków takich jak tabulacja czy znak nowej linii.

  \a   Znak alarmu (dzwonek, "alert"), kod ASCII 7 (BEL).
  \b   Backspace, kod ASCII 8 (BS).
  \f   Wysuw strony, formfeed, kod ASCII 12 (FF).
  \n   Nowa linia, newline, kod ASCII 10 (LF).
  \r   Powrót karetki, carriage return, kod ASCII 13 (CR).
  \t   Tabulacja pozioma, kod ASCII 9 (HT).
  \"   Dosłowny cudzysłów

   awk interpretuje napisy po prawej stronie operatora ~ lub !~ jako wyrażenia regularne. Dzieki temu, wyrażenie regularne możemy zapisac w zmiennej, a nastepnie wykorzystać tą zmienną podczas porównania.

Przykład "mojawk22":

#mojawk22, program awk, który wyświetla komputery
#zawierające w nazwie podwójny cudzysłów (")
BEGIN { matchstr = "\"" }
$1 ~ matchstr { print $0 }

Ekran:

>awk -f mojawk22 awktekst
  "trs80" 64      Z101     EL0020    0

   W progranie awk możemy sprawdzać kilka warunków jednocześnie. Pomocne w tym są operatory:

  ||   logiczne lub (or)
  &&   logiczne i (and)
  !    logiczna negacja (not)

Przykład "mojawk23":

#mojawk23, program awk, który wyświetla komputery typu 486
#posiadajace wiecej niż 300 Mb pamięci dyskowej
$1 == "486" && $5 > 300 { print $0 }

Ekran:

>awk -f mojawk23 awktekst
  486     8192    A424     CC0182    670

   Jeżeli dwa wyrażenia regularne oddzielimy przecinkiem, to awk wyświeli linie, zaczynając lini zgodnej z pierwszym wyrażeniem, do lini zgodnej z drugim wyrażeniem.

Przykład "mojawk24":

#mojawk24, program awk, który wyświetla komputery
#zaczynając od XT a kończąc na Mac
/XT/, /Mac/ { print $0 }

Ekran:

>awk -f mojawk24 awktekst
  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

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