Informatyka jako dziedzina wiedzy

Download Report

Transcript Informatyka jako dziedzina wiedzy

Wprowadzenie do informatyki
Wykład 5
Przetwarzanie tekstów i AWK
[email protected]
http://www.cs.put.poznan.pl/jnawrocki/wdi/
Copyright, 2007 © Jerzy R. Nawrocki
Wprowadzenie
Problem konwersji plików
FName:Jurek
SName:Busz
FName:Alek SName:Gor
FName
Jurek
Alek
SName
Busz
Gor
J.Nawrocki, Przetwarzanie tekstów i AWK
Salary 585
Salary 700
Salary
585
700
Wprowadzenie
Problem konwersji plików
#include <stdio.h>
#include <stdlib.h>
FILE *fin;
char token[200];
char gettoken(void)
{int i=0;
char c;
do {c = getc(fin);
if (c == EOF) return (EOF);
} while (c < ‘!’);
J.Nawrocki, Przetwarzanie tekstów i AWK
Rozwiązanie w C:
 40 linii kodu
Wprowadzenie
Problem konwersji plików
Rozwiązanie w AWK
BEGIN
{FS=":| ";}
NR == 1 {print $1, "\t", $3, "\t", $5;}
{gsub(/,/, ".” , $6); print $2, "\t", $4, "\t", $6;}
J.Nawrocki, Przetwarzanie tekstów i AWK
Wprowadzenie
Powstanie języka
AWK:
• Aho, Weinberger, Kernighan
Bell Labs, New Jersey (USA), 1977
Platformy: Unix, MS DOS/Windows
Podobieństwo do C
J.Nawrocki, Przetwarzanie tekstów i AWK
Idea języka AWK
Plik wejściowy
Pole
Wiersz
Jerzy Nawrocki
43089
I1
Jan
Kowalski
43780
I2
Adam
Malinowski 43990
I1
Pola: $1, $2, $3, ...
J.Nawrocki, Przetwarzanie tekstów i AWK
Idea języka AWK
Schemat programu w AWK
Reguła przetwarzania
wzorzec1
{instrukcje1}
wzorzec2
{instrukcje2}
...
...
J.Nawrocki, Przetwarzanie tekstów i AWK
Idea języka AWK
Zasada działania
Jerzy Nawrocki
Jan
Kowalski
Adam
Malinowski
wzorzec1 {instrukcje1}
wzorzec2 {instrukcje2}
...
...
J.Nawrocki, Przetwarzanie tekstów i AWK
$0 oznacza
bieżący
wiersz
Najprostsze programy
Ile pól
na wyjściu?
Jerzy Nawrocki
43089
I1
Jan
Kowalski
43780
I2
Adam
Malinowski 43990
I1
$4==”I1”
J.Nawrocki, Przetwarzanie tekstów i AWK
{ print $2, $1; }
Najprostsze programy
Ile pól
na wyjściu?
Jerzy Nawrocki
43089
I1
Jan
Kowalski
43780
I2
Adam
Malinowski 43990
I1
$4==”I1”
J.Nawrocki, Przetwarzanie tekstów i AWK
Najprostsze programy
Jakie pole
najpierw?
Jerzy Nawrocki
43089
I1
Jan
Kowalski
43780
I2
Adam
Malinowski 43990
I1
{ print $2, $1; }
J.Nawrocki, Przetwarzanie tekstów i AWK
Wzorce wiersza
• Początek i koniec tekstu
• Relacje
• Wzorce złożone
• Wzorce zakresu
• Wyrażenia regularne
J.Nawrocki, Przetwarzanie tekstów i AWK
Początek i koniec tekstu
Jerzy Nawrocki
43089
I1
Jan
Kowalski
43780
I2
Adam
Malinowski 43990
I1
BEGIN
$4==”I2”
END
{ print ”-----”; }
{ print $2, $1; }
{ print ”*****”; }
J.Nawrocki, Przetwarzanie tekstów i AWK
Początek i koniec tekstu
Jerzy Nawrocki
43089
I1
Jan
Kowalski
43780
I2
Adam
Malinowski 43990
I1
END
$4==”I2”
BEGIN
{ print ”*****”; }
{ print $2, $1; }
{ print ”-----”; }
J.Nawrocki, Przetwarzanie tekstów i AWK
Relacje
12
11
2
11
$1 > $2
J.Nawrocki, Przetwarzanie tekstów i AWK
Wzorce złożone
||
&&
!
lub (alternatywa)
$1==1 || $2==1
i (koniunkcja)
$1==1 && $2==1
nie (zaprzeczenie)
! $1==1
J.Nawrocki, Przetwarzanie tekstów i AWK
Wzorce złożone
Jerzy Adam
43089
I1
Adam
Kowalski
43780
I2
Adam
Malinowski 43990
I1
$4==”I1” && $1==”Adam”
J.Nawrocki, Przetwarzanie tekstów i AWK
{ print $2, $1; }
Wzorce z wyrażeniami regularnymi
Np. znak lub ciąg znaków
$0, $1, $2, ..
Cały ciąg Ciąg_zn ~ /^ wyr_reg $/
Róża prawdziwa i sztuczna
Szydzi z prawdziwej sztuczna:
- Krótkie twoje trwanie,
Wdzięk pani wkrótce minie
A mój pozostanie...
- Tak - rzecze wonna róża,
Rumieniąc się skromnie –
Ale patrząc na panią,
Myśleć będą o mnie!
$1 ~ /^A$/
J.Nawrocki, Przetwarzanie tekstów i AWK
Wzorce z wyrażeniami regularnymi
Np. znak lub ciąg znaków
$0, $1, $2, ..
Cały ciąg Ciąg_zn ~ /^ wyr_reg $/
Początek Ciąg_zn ~ /^ wyr_reg /
Róża prawdziwa i sztuczna
Szydzi z prawdziwej sztuczna:
- Krótkie twoje trwanie,
Wdzięk pani wkrótce minie
A mój pozostanie...
- Tak - rzecze wonna róża,
Rumieniąc się skromnie –
Ale patrząc na panią,
Myśleć będą o mnie!
$1 ~ /^A/
J.Nawrocki, Przetwarzanie tekstów i AWK
Wzorce z wyrażeniami regularnymi
Np. znak lub ciąg znaków
$0, $1, $2, ..
Cały ciąg Ciąg_zn ~ /^ wyr_reg $/
Początek Ciąg_zn ~ /^ wyr_reg /
Koniec
Ciąg_zn ~ / wyr_reg $/
Róża prawdziwa i sztuczna
Szydzi z prawdziwej sztuczna:
- Krótkie twoje trwanie,
Wdzięk pani wkrótce minie
A mój pozostanie...
- Tak - rzecze wonna róża,
Rumieniąc się skromnie –
Ale patrząc na panią,
Myśleć będą o mnie!
$1 ~ /dzi$/
J.Nawrocki, Przetwarzanie tekstów i AWK
Wzorce z wyrażeniami regularnymi
Np. znak lub ciąg znaków
$0, $1, $2, ..
Cały ciąg Ciąg_zn ~ /^ wyr_reg $/
Początek Ciąg_zn ~ /^ wyr_reg /
Koniec
Podciąg
Ciąg_zn ~ / wyr_reg $/
Ciąg_zn ~ / wyr_reg /
J.Nawrocki, Przetwarzanie tekstów i AWK
Róża prawdziwa i sztuczna
Szydzi z prawdziwej sztuczna:
- Krótkie twoje trwanie,
Wdzięk pani wkrótce minie
A mój pozostanie...
- Tak - rzecze wonna róża,
Rumieniąc się skromnie –
Ale patrząc na panią,
Myśleć będą o mnie!
$1 ~ /dzi/
Wzorce z wyrażeniami regularnymi
Np. znak lub ciąg znaków
$0, $1, $2, ..
Cały ciąg Ciąg_zn ~ /^ wyr_reg $/
Początek Ciąg_zn ~ /^ wyr_reg /
Koniec
Podciąg
Ciąg_zn ~ / wyr_reg $/
Ciąg_zn ~ / wyr_reg /
J.Nawrocki, Przetwarzanie tekstów i AWK
Róża prawdziwa i sztuczna
Szydzi z prawdziwej sztuczna:
- Krótkie twoje trwanie,
Wdzięk pani wkrótce minie
A mój pozostanie...
- Tak - rzecze wonna róża,
Rumieniąc się skromnie –
Ale patrząc na panią,
Myśleć będą o mnie!
$0 ~ /dzi/
Wzorce z wyrażeniami regularnymi
Np. znak lub ciąg znaków
$0, $1, $2, ..
Cały ciąg Ciąg_zn ~ /^ wyr_reg $/
Początek Ciąg_zn ~ /^ wyr_reg /
Koniec
Podciąg
Ciąg_zn ~ / wyr_reg $/
Ciąg_zn ~ / wyr_reg /
$0 ~ / wyr_reg / = / wyr_reg /
J.Nawrocki, Przetwarzanie tekstów i AWK
Róża prawdziwa i sztuczna
Szydzi z prawdziwej sztuczna:
- Krótkie twoje trwanie,
Wdzięk pani wkrótce minie
A mój pozostanie...
- Tak - rzecze wonna róża,
Rumieniąc się skromnie –
Ale patrząc na panią,
Myśleć będą o mnie!
/dzi/
Znaki specjalne
.
[ ]
\n
\.
\”
\ddd
dowolny znak
zbiór znaków
nowa linia
kropka
znak cudzysłowu
znak o kodzie oktalnym ddd
J.Nawrocki, Przetwarzanie tekstów i AWK
Znaki specjalne
Co robi ten
program?
/^.$/
/[0123456789]/
/[0-9]/
J.Nawrocki, Przetwarzanie tekstów i AWK
Dopełnienie zbioru znaków
Co za
różnica?
[^ ... ]
/[^0-9]/
/^[0-9]/
J.Nawrocki, Przetwarzanie tekstów i AWK
Alternatywa (lub)
wyr_reg | wyr_reg
Co robi ten
program?
Ząbki listka
Nic tak nie potrafi gryźć
Jak cudzy laurowy liść.
/fi | ki/
J.Nawrocki, Przetwarzanie tekstów i AWK
Operator powtarzania
Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą.
1 2 3
Rok 1984
4 damy
$1 ~ /[0-9]/
J.Nawrocki, Przetwarzanie tekstów i AWK
Operator powtarzania
Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą
1-cyfrową.
1 2 3
Po3maj
Rok 1984 2 raki
4 damy
$1 ~ /^ [0-9] $/
J.Nawrocki, Przetwarzanie tekstów i AWK
Operator powtarzania
Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą
1- lub 2-cyfrową.
1 2 3
Po3maj
Po3maj
Po3maj
Rok 1984 2 raki
32 raki 32 raki
4 damy
0
120 zl
$1 ~ /^ [0-9] | [0-9][0-9] $/
J.Nawrocki, Przetwarzanie tekstów i AWK
Operator powtarzania
Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą.
1 2 3
Po3maj
Rok 1984 2 raki
4 damy
Po3maj
32 raki
0
Po3maj
32 raki
120 zl
$1 ~ /^ [0-9] | [0-9][0-9] | [0-9][0-9][0-9] $/
1 cyfra
2 cyfry
J.Nawrocki, Przetwarzanie tekstów i AWK
3 cyfry
Operator powtarzania
[0-9] = [0-9]1
[0-9][0-9] = [0-9]2
[0-9][0-9][0-9] = [0-9]3
..................
[0-9]1 | [0-9]2 | [0-9]3 | ... = [0-9]+
J.Nawrocki, Przetwarzanie tekstów i AWK
Operator powtarzania
Wypisz wszystkie wiersze, w których pierwsze pole jest liczbą.
1 2 3
Po3maj
Rok 1984 2 raki
4 damy
Po3maj
32 raki
0
Po3maj
32 raki
120 zl
32 raki
0
32 raki
120 zl
$1 ~ /^ [0-9]+ $/
1 2 3
4 damy
2 raki
J.Nawrocki, Przetwarzanie tekstów i AWK
Operator powtarzania *
Musi przynajmniej raz
wystąpić w.
Może wystąpić
sekwencja w.
w+ =
w | ww | www | . . .
w* =  | w | ww | www | . . .
Ciąg pusty
w( | w | ww | www |.. )=
w|ww|www|wwww|..
x=x
x=x
w+ = w w* = w* w
x w* = x | x w+
w*x = x | w+x
J.Nawrocki, Przetwarzanie tekstów i AWK
Zagadka
Co robi ten
program?
Nadgodziny
2001/02
================
Nawrocki 60
Complak 359
$2 ~ /^[0-9]+$/
J.Nawrocki, Przetwarzanie tekstów i AWK
Nawiasy
17Q
10O
O
/^[0-7]+(Q|O)$/
/^[0-7]+Q|O$/
J.Nawrocki, Przetwarzanie tekstów i AWK
Opcjonalność
14
15D
16d
D17
D
/^ [0-9]+(D|d)? $/
J.Nawrocki, Przetwarzanie tekstów i AWK
Zmienne
• Zmienne wprowadzone przez programistę
(typ: ciąg znaków;
wartość początkowa: ciąg pusty / zero)
• Zmienne wbudowane
(mają standardowe znaczenie)
• Zmienne polowe $1, $(i+j-1), ..
J.Nawrocki, Przetwarzanie tekstów i AWK
Przykładowe zmienne wbudowane
NF - liczba pól w wierszu
NR - numer wiersza
FILENAME - nazwa pliku
J.Nawrocki, Przetwarzanie tekstów i AWK
Zmienne
NR NF total
1
2
0
Reguly sitwy
-----------Zero do zera
A bedzie kariera.
{total= total + NF;}
END {print "Pol: ", total;
print "Wierszy: ", NR;}
J.Nawrocki, Przetwarzanie tekstów i AWK
Podsumowanie
gawk -f prog.awk <in.txt >out.txt
Wreszcie!
Wyrażenia regularne
Zmienne
Inne mechanizmy AWK:
• Instrukcje złożone (if, while, ..)
• Tablice dynamiczne
• Funkcje wbudowane (gsub, ..)
J.Nawrocki, Przetwarzanie tekstów i AWK
Literatura

• A. Aho, B. Kernighan, P. Weinberger, The AWK
Programming Language, Addison-Wesley,
Reading, 1988.
• J. Nawrocki, W. Complak, Wprowadzenie do
przetwarzania tekstów w języku AWK, Pro
Dialog 2 (1994), 23-46.
J.Nawrocki, Przetwarzanie tekstów i AWK