天天看點

awk學習筆記(12) - 條件語句

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,如需轉載請自行聯系原作者