歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> Awk 編程學習筆記之二

Awk 編程學習筆記之二

日期:2017/2/28 11:26:53   编辑:關於Unix


Awk 編程學習筆記之二

這個工資文件相比以上要特殊一些,首先人名在前,而且賬號與金額聯在一起,19位賬號就是金額。
要求:按賬號19位、姓名8位、工資8位來排列,且如姓名不足8位在之後補足,工資不足8位則在工資之前補。同時要求去掉前面兩行及工資為0的名單,沒有賬號在前補19位空格,並輸出工資總數加以核對,處理後應如下排列:
4367422926350133100張三 1250.00
4367422926351220178李四 1300.00
蘇五丙 1340.00
4367422926351220178孫六月 390.00
…… ……
awk程序:
--------------------------------
#shgz2.sh
cut -c1-8 $1>tmp1.txt #用cut命令分別提出三個字段的內容。
cut -c9-27 $1>tmp2.txt
cut -c28-60 $1>tmp3.txt
paste -d, tmp2.txt tmp1.txt tmp3.txt|tr -d " ">tmp4.txt #三個文件合一,並用”,”為分隔符
awk -F, ?{ #-F, 表示分隔符為”,”
if ($1~/^2/)
printf("%-19.19s%-8.8s%8.2f ",$1,$2,$3)
else
printf("%-19.19s%-8.8s%8.2f ","?"$kk"?",$2,$3)}? tmp4.txt > tmp5.txt
sed ?/ 0.00$/d? tmp5.txt>$2 #去掉金額為0的行
awk ?$NF~/[0-9]/{
sum=sum+$NF
}
END{
system("rm tmp*.txt") #刪除臨時生成的文件
printf("The sum is%16.2f! ", sum) #輸出工資總數
}? $2
-----------------------------------------------
附注:
本例中結合了cut,sed與awk的用法!相關命令及參數可參考相關書籍如cut -c1-8 表示提出每一行的1到8位字符.
與awk一樣,cut也可以按分隔符來分離字段,而且缺省的分隔符為空格,當然也可修改.cut -f1 gz2.txt就會取出姓名這個字段.但是我們可以看到,賬號與金額是分不出來的,所以也是我們用cut -c1-8的原因.
Copyright © Linux教程網 All Rights Reserved