한국   대만   중국   일본 
AWK ? Wikipedia ti?ng Vi?t B??c t?i n?i dung

AWK

Bach khoa toan th? m? Wikipedia
AWK
Thi?t k? b?i Alfred Aho ,
Brian Kernighan ,
Peter Weinberger
Xu?t hi?n l?n đ?u th?p nien 1970
t?i Bell Labs , Hoa Kỳ
Ki?m tra ki?u ki?u đ?ng
H? đi?u hanh đa n?n
Cac b?n tri?n khai l?n
gawk , nawk
?nh h??ng t?
grep

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 .

L?ch s? [ s?a | s?a ma ngu?n ]

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.

Cu phap [ s?a | s?a ma ngu?n ]

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.

Vi d? [ s?a | s?a ma ngu?n ]

đ? 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?u [ s?a | s?a ma ngu?n ]

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:
$1
 ==
 "Minh"

  • gi?i tinh la nam t??ng ?ng v?i m?u sau:
$2
 ==
 "nam"

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:

{
cau
 l?nh
}

đ?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 [ s?a | s?a ma ngu?n ]

Cau l?nh th??ng dung trong Awk la l?nh in ra man hinh ( print ). Ch?ng h?n:

  • In ra ten ng??i:
{
print
 $1
}

{
print
 $3
 /
 100
}

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 ]

$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 )
$1
 ==
 "Minh"

Tr??ng h?p đ?c bi?t [ s?a | s?a ma ngu?n ]

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
 }

Bi?n [ s?a | s?a ma ngu?n ]

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 .

Ch?y ch??ng trinh [ s?a | s?a ma ngu?n ]

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 .

Cac phien b?n [ s?a | s?a ma ngu?n ]

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.

Xem them [ s?a | s?a ma ngu?n ]

Tai li?u [ s?a | s?a ma ngu?n ]

Tham kh?o [ s?a | s?a ma ngu?n ]