awk的條件語句與進階語言相同,其實就下面的四種
if
else if
else
?:
先建立一個測試檔案,student-marks:
Jones 2143 78 84 77
Gondrol 2321 56 58 45
RinRao 2122 38 37
Edwin 2537 87 97 95
Dayan 2415 30 47
1)現在要找出缺少某一科或某幾科成績的名單:
awk '{if($3==""||$4==""||$5=="") print $1, "score missing"}' student-marks
可以看到,if語句的用法跟C或php是一樣的。
輸出結果:
RinRao score missing
Dayan score missing
2)辨別出所有考試全及格的和不及格的名單,及格的在其後追加顯示"PASS",有一門或幾科不及格的在其後顯示"FAIL"。
首先建立一個awk腳本,check-marks.awk:
{
if ($3 >=60 && $4 >= 60 && $5 >= 60)
print $0,"=>","PASS";
else
print $0,"=>","FAIL";
}
然後執行:
awk -f check-marks.awk student-marks
輸出的結果是:
Jones 2143 78 84 77 => PASS
Gondrol 2321 56 58 45 => FAIL
RinRao 2122 38 37 => FAIL
Edwin 2537 87 97 95 => PASS
Dayan 2415 30 47 => FAIL
3)計算每個學生的平均成績并評級,90分以上的是A,80-90是B,70-80是C,70以下是D。
首先建立awk腳本,grade.awk:
total = $3 + $4 + $5;
avg = total / 3;
if(avg >= 90) grade="A";
else if(avg >= 80) grade="B";
else if(avg >= 70) grade="C";
else grade="D";
print $0, "=>", grade;
執行:
awk -f grade.awk student-marks
Jones 2143 78 84 77 => C
Gondrol 2321 56 58 45 => D
RinRao 2122 38 37 => D
Edwin 2537 87 97 95 => A
Dayan 2415 30 47 => D
4)更改檔案格式,要求每輸出三名學生的記錄就換行。
awk 'ORS=NR%3?",":"\n"' student-marks
Jones 2143 78 84 77,Gondrol 2321 56 58 45,RinRao 2122 38 37
Edwin 2537 87 97 95,Dayan 2415 30 47,
解釋一下:?:是三目運算符,跟C和php中是一樣的,ORS是記錄的分隔符,預設是換行符(\n),NR是行号,%3是取模。上面的程式的意思是,當行号能被3整除時就輸出\n換行,否則就輸出逗号。因為沒有指明action,預設是輸出整條記錄。
本文轉自 ustb80 51CTO部落格,原文連結:http://blog.51cto.com/ustb80/1036274,如需轉載請自行聯系原作者