linux之shell awk 之二

liqilin0429發表於2011-01-24

修改數值域取值--修改M . Ta n s l e y的目前級別分域,使其數值從 4 0減為3 9,使用賦值語句$ 6 = $ 6 - 1,當然在實施修改前首先要匹配域名。
oracle@ser168:~/qilin/demo> awk '{if($1=="M.Tansley") $6=$6-1;print $1,$6,$7}' grade.txt
M.Tansley 39 44
J.Lulu 24 26
P.Bunny 35 28
J.Troll 26 26
L.Tansley 30 28
 修改文字域--修改文字域即對其重新賦值。需要做的就是賦給一個新的字串。在 J . Tr o l l中加入字母,使其成為J . L . Tr o l l,表示式為$ 1 = " J . L . Tr o l l ",記住字串要使用雙秒號( " ") ,並用圓括號括起整個語法。
oracle@ser168:~/qilin/demo> awk '{if($1=="J.Troll")($1="J.L.Troll");print $1}' grade.txt
M.Tansley
J.Lulu
P.Bunny
J.L.Troll
L.Tansley
. 只顯示修改記錄
oracle@ser168:~/qilin/demo> awk '{if($1=="J.Troll") {($1="J.L.Troll");print $1}}' grade.txt
J.L.Troll
 增加列值--
oracle@ser168:~/qilin/demo> awk '(tot+=$6);END{print "Club student total points:"tot}' grade.txt
M.Tansley        05/99  48311     Green         8       40      44
J.Lulu          06/99   48317     green         9       24      26
P.Bunny         02/99   48        Yellow        12      35      28
J.Troll         07/99   4842      Brown-3       12      26      26
L.Tansley       05/99   4712      Brown-2       12      30      28
Club student total points:155
如果檔案很大,你只想列印結果部分而不是所有記錄,在語句的外面加上圓括號()即可。
oracle@ser168:~/qilin/demo> awk '{(tot+=$6)}; END{print "Club student total points:"tot}' grade.txt
Club student total points:155
使用此模式列印檔名及其長度,然後將各長度相加放入變數 t o t中。
oracle@ser168:~/qilin/demo> ls -l | awk '/^[^d]/ {print $9"\t"$5}{tot+=$5} END {print "TOTAL KB:"tot}'

        78
        1657
        1721
        199
        199
        78
        88
TOTAL KB:8116

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20976446/viewspace-684539/,如需轉載,請註明出處,否則將追究法律責任。

相關文章