一個awk if 巢狀 if 的指令碼

三角形發表於2016-04-30
 1 [root@makeISO sjx]# cat sex.sh 
 2 #!/bin/bash
 3 
 4 #    統計如下內容,並輸出結果
 5 #    (男職工未婚數量/男員工整體數量)(女員工未婚數量/女員工整體數量)
 6 
 7 echo '姓名    性別    婚否
 8 001    男    已婚
 9 002    男    未婚
10 003    男    未婚
11 004    男    未婚
12 005    女    已婚
13 006    女    未婚
14 007    女    未婚
15 008    女    未婚
16 009    女    未婚
17 010    女    未婚
18 011    女    未婚
19 012    女    未婚'\
20     | sed '1d' \
21     | awk ' \
22         BEGIN    {m=0;mno=0;f=0;fno=0}\
23             {if($2 == "")\
24                 {m+=1;if($3 == "未婚"){mno+=1}}\
25             else\
26                 {f+=1;if($3 == "未婚"){fno+=1}}\
27             }\
28         END    {printf "(男職工未婚數量/男員工整體數量):(%s/%s)\n(女員工未婚數量/女員工整體數量):(%s/%s)\n",mno,m,fno,f}\
29     '
30 [root@makeISO sjx]# sh sex.sh
31 (男職工未婚數量/男員工整體數量):(3/4)
32 (女員工未婚數量/女員工整體數量):(7/8)

 

下面指令碼也可以(去掉 sed ,else 換成 else if )

 

 1 #!/bin/bash
 2 
 3 #    統計如下內容,並輸出結果
 4 #    (男職工未婚數量/男員工整體數量)(女員工未婚數量/女員工整體數量)
 5 
 6 echo '姓名    性別    婚否
 7 001    男    已婚
 8 002    男    未婚
 9 003    男    未婚
10 004    男    未婚
11 005    女    已婚
12 006    女    未婚
13 007    女    未婚
14 008    女    未婚
15 009    女    未婚
16 010    女    未婚
17 011    女    未婚
18 012    女    未婚'\
19     | awk ' \
20         BEGIN    {m=0;mno=0;f=0;fno=0}\
21             {if($2 == "")\
22                 {m+=1;if($3 == "未婚"){mno+=1}}\
23             else if($2 == "")\
24                 {f+=1;if($3 == "未婚"){fno+=1}}\
25             }\
26         END    {printf "(男職工未婚數量/男員工整體數量):(%s/%s)\n(女員工未婚數量/女員工整體數量):(%s/%s)\n",mno,m,fno,f}\
27     '

 

相關文章