AWK
la
ngon ng? l?p trinh
đ??c nh?m m?c đich x? ly cac
T?p tin ch?
(
text file
) theo nguyen ly
kh?p m?u
(
pattern matching
); đ?ng th?i con la ten g?i m?t
ch??ng trinh
trong
h? đi?u hanh
UNIX
. Trong UNIX cac ch??ng trinh đ??c vi?t ten ch? th??ng nen AWK con đ??c g?i la
Awk
ho?c
awk
.
Vao đ?u
nh?ng n?m 1970
, cong c? m?nh trong
UNIX
co nhi?m v? x? ly cac file v?n b?n la
grep
, d?a tren nguyen t?c kh?p m?u. Cac tac gi? mu?n b? sung tinh n?ng thao tac v?i s? đ? đ?a Awk thanh m?t cong c? h?u hi?u co th? g?n v?i m?t
ngon ng? l?p trinh
th?c th?. đ?c bi?t la kh? n?ng
phan tach
cu phap
; v? ph??ng di?n nay thi Awk g?n nh? đ?m đ??ng đ??c vai tro c?a
lex
va
yacc
[1]
.
Ten g?i AWK b?t ngu?n t? cach g?i đua c?a cac đ?ng nghi?p t?i
Bell Labs
, ghep cac ch? cai đ?u c?a ten ba tac gi?: Aho, Weinberger, va Kernighan.
D?ng cu phap c? b?n c?a Awk la:
m?u_1
{
cau
l?nh_1
};
m?u_2
{
cau
l?nh_2
};
...
Theo đo
may tinh
s? do t?ng dong trong file ch? va so sanh v?i m?u 1. N?u kh?p, cau l?nh 1 đ??c th?c hi?n. Ti?p theo may tinh so sanh dong ch? v?i m?u 2. N?u kh?p, cau l?nh 2 đ??c th?c hi?n; va c? nh? v?y.
đ? minh h?a ta l?y vi d? m?t file h? s? s?c kh?e co n?i dung nh? sau (m?i ng??i co thong tin gi?i tinh va
chi?u cao
)
An nam 165
Mai nu 158
Minh nam 170
Minh nu 162
Thanh nam 169
V?i m?t file nh? v?y cac c?t đ??c Awk xem nh? cac
tr??ng
va đ??c đ?t ten
$1
cho c?t th? nh?t,
$2
cho c?t th? hai,
$3
cho c?t th? ba,...
M?t m?u chinh la bi?u th?c so sanh (
bi?u th?c logic
) gi?a ten c?t va gia tr?. Ch?ng h?n:
- ten ng??i la Minh t??ng ?ng v?i m?u sau:
- gi?i tinh la nam t??ng ?ng v?i m?u sau:
Khi g?p m?t m?u, may tinh hi?u r?ng ch? th?c hi?n cau l?nh v?i nh?ng dong t??ng ?ng v?i m?u đo. Trong tr??ng h?p th?c hi?n l?nh v?i m?i dong trong file ch? thi m?u đ??c b? qua, ch? c?n vi?t:
đ?i v?i m?u, con co th? dung cac
toan t? logic
nh?
||
(ho?c),
&&
(va). đ? trinh bay đ??c đ?n gi?n, ? đay ta khong đ? c?p đ?n.
Cau l?nh th??ng dung trong Awk la l?nh in ra man hinh (
print
). Ch?ng h?n:
Trong tr??ng h?p in đ?y đ? c? dong thi ta b? qua ph?n
{cau l?nh}
.
Cau l?nh c?a Awk con bao g?m c? nh?ng
c?u truc đi?u khi?n
(l?p, r? nhanh) th??ng g?p trong cac ngon ng? l?p trinh. ? đay, đ? đ?n gi?n ta khong đ? c?p đ?n.
Ngoai ra, n?u co nhi?u cau l?nh trong m?t c?p
{ }
thi chung c?n đ??c phan tach b?i d?u ch?m ph?y.
L?nh đ?y đ?: m?u đi kem cau l?nh
[
s?a
|
s?a ma ngu?n
]
- In ra ten va
chi?u cao
nh?ng ng??i la nam gi?i
$2
==
"nam"
{
print
$1
,
$3
}
- In ra
chi?u cao
quy ra met c?a m?i ng??i trong danh sach (khong c?n vi?t ra
m?u
)
{
print
$1
,
$2
,
$3
/
100
}
- In ra thong tin đ?y đ? c?a t?t c? nh?ng ng??i co ten Minh (khong c?n vi?t cau l?nh
print
)
Thong th??ng v?i m?i dong
m?u {cau l?nh}
may s? ki?m tra đ?i chi?u v?i t?t c? cac dong trong file ch?, l?n l??t t? tren xu?ng d??i. N?u dong nao kh?p v?i m?u thi th?c hi?n cau l?nh. Awk cho phep m?t ngo?i l? la đ??c th?c hi?n m?t s? cau l?nh tr??c va sau khi khi ra soat file ch?. Cac cau l?nh ngo?i l? nay đ??c đ?t kem v?i
BEGIN { }
va
END { }
.
Ch?ng h?n c?n m?t dong tieu đ? ? tren cung, ti?p theo la in ra cac con s?
chi?u cao
c?a nh?ng ng??i n? gi?i (gi?u ten); cu?i cung la t?ng k?t co bao nhieu ng??i la n? va
chi?u cao
trung binh la bao nhieu:
BEGIN
{
print
"So lieu chieu cao cua nu gioi "
}
$1
=
"nu"
{
print
$3
;
sonu
=
sonu
+
1
;
caotb
=
caotb
+
$3
}
END
{
print
"Tong so nu la: %d\n voi chieu cao trung binh %8.2f m."
,
sonu
,
caotb
*
100.0
/
sonu
}
Cac bi?n trong Awk co
ki?u đ?ng
, khong c?n khai bao va t? đ?ng l?y cac gia tr? m?c đ?nh (b?ng 0 v?i ki?u s?, b?ng xau r?ng đ?i v?i
chu?i ky t?
).
Trong vi d? tren hai bi?n la
sonu
va
caotb
đ??c dung đ?n ma khong c?n đ??c kh?i t?o trong ph?n
BEGIN
.
T?
d?u nh?c l?nh
co th? g?i tr?c ti?p Awk v?i đo?n ma cung ten file ch?, theo m?u:
awk
'n?i dung ma l?nh awk'
ten_file_ch?
awk
-f
ten_file_ma_l?nh.awk
ten_file_ch?
Ch?ng h?n:
awk
'$2 == "nam" { print $1, $3 }'
chieucao.txt
Ho?c n?u đa
l?u
file ma l?nh, ch?ng h?n
trung_binh.awk
thi co th? g?i
awk
-f
trung_binh.awk
chieucao.txt
đ?i v?i
UNIX
va
Linux
, co th? xau chu?i Awk v?i cac l?nh khac theo ki?u
?ng d?n l?nh
.
Hai phien b?n chinh c?a Awk la:
- gawk
: theo gi?y phep
GPL
.
- nawk
: m?t h? Awk m?i (
new Awk
) v?i nhi?u tinh n?ng đ??c b? sung.
|
---|
Dung cho k? ngh?
| |
---|
Dung trong gi?ng d?y
| |
---|
Co gia tr? l?ch s?
| |
---|