1. Trang chủ
  2. » Công Nghệ Thông Tin

Các bộ lọc lập trình đượcsed, awk

30 585 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 320,5 KB

Nội dung

1 Các bộ lọc lập trình được sed, awk Thanh-Hai Dang 2 Sed – stream editor • Là một filter-editor (stream-oriented editor). – Nhận đầu vào là một file script. – Mỗi dòng input được chép vào không gian mẫu (pattern space) – Các lệnh của script được thực hiện lần lượt theo từng dòng, – Mỗi lệnh thực hiện trên kết quả của lệnh trước đó – Kết quả xử lý được đưa ra stdout – Tệp gỗc không bị thay đổi • Ứng dụng – Xử lý tương tự lặp lại cho các dữ liệu khác nhau – Chương trình có tính linh động 3 Sed – Cấu trúc • #sed [tùy_chọn] ‘command’ file … • #sed [tùy_chọn] –fscript file … • Command := [addr][,addr][!]cmd[tham_số] • [addr] – `Số_dòng` – `Dòng_đầu~step` – `$`: Dòng cuối cùng – `/regexp/` OR `\%regexp%` – `/regexp/I` OR `\%regexp%I`: case sensitive – [addr], [addr]: miền địa chỉ – [addr]! : Negate the sense of the match 4 Sed – Cấu trúc • [cmd] • d: xóa dòng • s/regexp/replacement/flags • Flags – ‘g’: replace all matches – ‘p’: hiện thị dòng – ‘số’: thay thế dòng khớp thư ‘số’ – ‘I’: case sensitive 5 sed – ví dụ • #sed ‘s/xx/yy/g’ mwho – Thay thế tất cả xx bằng yy trên tất cả các dòng của file • #sed ‘/BSD/d’ mwho – Xóa tất cả các dòng chứa BSD • #sed ‘/^BEGIN/, /^END/p’ mwho – Hiện thị các dòng nằm giữa dòng BEGIN và END, kể cả 2 dòng này • #sed ‘/SAVE/!d’ mwho – Xóa tất cả các dòng không chứa SAVE 6 sed – ví dụ • #sed ‘/BEGIN/, /END/ !s/xx/yy/g’ nghevinh – Thay thế tất cả xx bằng yy trên tất cả các dòng trừ các dòng ở giữa BEGIN và END • $sed ‘/^$/d’ nghevinh – Xóa tất cả các dòng rỗng • #sed ‘s/.*/cp & &.copied/’ nghevinh – Biến đổi một danh sách tên tệp trong file nghevinh( mỗi dòng một tên) thành một dãy lệnh cp các tệp này sang tệp có đuôi .copied 7 Ngôn ngữ AWK • AWK: Aho, Weinberger, Kernighan • Là công cụ tìm kiếm các mẫu trong một tệp và thực hiện các lệnh trên các dòng thỏa mãn • Là một ngôn ngữ lập trình tựa C • Được dùng để tạo ra những bộ lọc phức tạp 8 AWK – Cấu trúc • $awk [tùy_chọn] [files] • [tùy_chọn] – -FC: C là ký tự phân cách trường – -f file: file chứa chương trình awk. • Một chương trình awkCác định nghĩa hàm – Các lệnh 9 Awk - các thành phần chương trình • Format các lệnh – [mask] {instructions} • Định nghĩa hàm – function name (parameter) instructions • Các biến – Trường: $0, $1, $2, … – Biến được định nghĩa trước – Biến do người sử dụng định nghĩa • variable=value 10 Awk Các biến được định nghĩa trước • FS Ký tự phân cách trường • NF Số trường của dòng hiện thời • NR Số thứ tự của dòng hiện thời • RS Ký tự phân cách dòng • OFS Ký tự phân cách trường, output • ORS Ký tự phân cách dòng, output • FILENAME Tên tệp đang được xử lý • ENVIRON[] Các biến môi trường • CONVFMT use when converting numbers to strings [...].. .AWK - Mask • Xác định điều kiện thực hiện các lệnh tương ứng với chúng cho mỗi dòng – Được đánh giá khi đọc mỗi dòng – Các lệnh tương ứng chỉ được chạy nếu mask thỏa mãn • Các mask chính – BEGIN: Trước khi xử lý tệp – END: Sau khi xử lý tệp – /regexp/: Thỏa mãn biểu thức chính qui 11 AWK – cách sử dụng regexp • $ awk '/foo/ { print $2 }' BBS-list • exp ~ /regexp/ – $ awk '$1 ~ /J/' inventory-shipped... dòng – awk {print NR, $0} • Tổng số liệu trường thứ 3 – awk {s += $3 } END {print s} • Bỏ các dòng có trường 1 bằng dòng trước – awk { if ( $1 != prev ) { print; prev=$1; } } 22 Awk- Ví dụ • Kiểm tra rằng tất cả các dòng đều có cùng số trường BEGIN {nberr = 0 } { if ( NR == 1 ) nb = NF; else if (nb != NF ) nberr++; } END { if (nberr != 0 ) print nberr , “bad records “; } • Khử tất cả các tiến trình. .. exp? if-true-exp : if-false-exp in array membership 14 AWKCác phép toán số học • • • • • • • • -x +x x ^ y OR x ** y x*y x/y x % y: the remain x+y x-y 15 AWKCác phép toán số học • • • • • • lvalue += increment lvalue -= decrement lvalue *= coefficient lvalue /= divisor lvalue %= modulus lvalue ^= power OR lvalue **= power 16 Các lệnh của awk • Rẽ nhán – IF (condition) instruction [else intruction]... “bad records “; } • Khử tất cả các tiến trình thuộc NSD nghevinh $ ps aux | awk $1==“nghevinh" {print "kill " $2}|sh 23 awk trên tệp chứa dữ liệu trường • Tìm xe giá dưới 30000 (francs) – $ awk -F: '$5 < 30000' carinfo • Tìm xe Opel chạy dưới 45000 (km) – awk -F: '$1 == "Opel" && $4 < 45000' carinfo • Giá trung bình các xe – $ awk -F: ' {price+=$5} ; \ END {print "Mean price =",price/NR,“USD"}' carinfo... tolower(string) toupper(string) 20 Các hàm được định nghĩa trước Kiểu mảng • Kiểu mảng – Element 1 Value 8 – Element "dog" Value "con cho" – arrayName[index] – arrayName[subscript] = value – delete arrayName[index] – delete arrayName – for (variable in arrayName) { commands } 21 AWK- Ví dụ • Hiển thị tên của tất cả NSD – awk -F: { print $1 } < /etc/passwd • Đảo chỗ các trường 3 và 4 – awk {print $1, $2, $4, $3}... /regexp/ – $ awk '$1 ~ /J/' inventory-shipped • exp !~ /regexp/ – $ awk '$1 !~ /J/' inventory-shipped 12 Awk - Datatypes • Always either a number or a string – Some contexts (arithmetic operators): a number • Convert string to number: ?? – Other contexts (concatenation): a string • Convert number to string: sprintf 13 Các toán tử của awk • • • • • • • • • ++ increment -decrement ! phủ định logic < >... nhãn hiệu và số lượng xe – $ awk -F: '{price[$1]+=$5;nb[$1]++} ; \ END {for (a in price) \ print a," : Mean price : ",price[a]/nb[a]}' carinfo 24 Soạn thảo văn bản vi • Trình soạn thảo văn bản theo mode tương tác toàn bộ màn hình Có mặt trên mọi UNIX • $vi [tùy_chọn] file – Two modes working in • Command • Insertion 25 Vi – command mode • Hoạt động ngay sau khi gọi vi – Chạy các lệnh soạn thảo – Di chuyển... expr3) instruction • Điều khiển vòng lặp – break – continue 17 Các lệnh …(tiếp) • Kết thúc – exit [return_code] • Sang dòng tiếp theo – next • Hiện thị dữ liệu – print [expressions] [>file] – printf format, expressions [>file] 18 Các hàm định nghĩa trước Kiểu số • • • • • • • • int(x) sqrt(x) exp(x) log(x) sin(x) cos(x) atan2(y, x) rand() 19 Các hàm định nghĩa trước Kiểu string • • • • • • • • • index(in,... mọi UNIX • $vi [tùy_chọn] file – Two modes working in • Command • Insertion 25 Vi – command mode • Hoạt động ngay sau khi gọi vi – Chạy các lệnh soạn thảo – Di chuyển con trỏ (cursor) trong tệp – Gọi các lệnh của ex(:cmd) – Gọi shell UNIX để chạy một lệnh – Lưu trữ tệp và kết thúc phiên làm việc 26 Vi – insertion mode • Cho phép chèn hoặc sửa đổi văn bản của tệp đang soạn thảo – Vào mode insertion:... • rx [n]yy p, P :g/xx/s//yy/ :w[file] :n1, n2w fic :x, fl:wq :q[!] :e file2 :set nu/nonu :help Thay ký tự hiện thời bằng x Chép [n] dòng vào vùng đệm Chèn nội dung vùng đệm vào sau/trước Thay thế toàn bộ xx bằng yy Ghi lại tệp đang soạn, dưới tên file Ghi lại từ dòng n1 đến n2 Ghi tệp rồi thoát Thoát không ghi Soạn thỏa fic2 Hiển thị (No) số dòng 29 mc command 30

Ngày đăng: 09/05/2014, 08:45

TỪ KHÓA LIÊN QUAN

w