日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Awk 編程學習筆記之二

【Awk 編程學習筆記之二】
2.
有工資文件gz2.txt如下:
姓名 賬號 金額
-----------------------------------
張三 43674229263501331001250
李四 43674229263512201781300
王二 43674229263512205460
蘇五丙 1340
孫六月 4367422926351220178390
…… ……
這個工資文件相比以上要特殊一些 , 首先人名在前 , 而且賬號與金額聯(lián)在一起 , 19位賬號就是金額 。
要求:按賬號19位、姓名8位、工資8位來排列 , 且如姓名不足8位在之后補足 , 工資不足8位則在工資之前補 。同時要求去掉前面兩行及工資為0的名單 , 沒有賬號在前補19位空格 , 并輸出工資總數(shù)加以核對 , 處理后應如下排列:
4367422926350133100張三 1250.00
4367422926351220178李四 1300.00
蘇五丙 1340.00
4367422926351220178孫六月 390.00
…… ……
awk程序:
--------------------------------
#shgz2.sh
cut -c1-8 $1>tmp1.txt #用cut命令分別提出三個字段的內(nèi)容 。
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.2fn",$1,$2,$3)
else
printf("%-19.19s%-8.8s%8.2fn","""$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.2f!n", sum) #輸出工資總數(shù)
}" $2
-----------------------------------------------
附注:
本例中結合了cut,sed與awk的用法!相關命令及參數(shù)可參考相關書籍如cut -c1-8 表示提出每一行的1到8位字符.
與awk一樣,cut也可以按分隔符來分離字段,而且缺省的分隔符為空格,當然也可修改.cut -f1 gz2.txt就會取出姓名這個字段.但是我們可以看到,賬號與金額是分不出來的,所以也是我們用cut -c1-8的原因.

    推薦閱讀