awk处理案例四
【场景】--计算行的和
但若是要计算行的和呢?假设文件有N行,10列,想计算这10列的和,作为新的$11,每行都这么处理,那要如何实现呢?
【代码】
1 awk '{for (i=1;i<=NF;i++) s=s+$i; print $0,s;s=0}' 2 awk '{for(i=1;i<=NF;i++){a[NR]+=$i} print $0,a[NR];delete a}'
【测试】
[li0924@localhost awk]$ cat d.txt 1 2 4 5 2 6 4 43 23 3 4 5 3 42 2 4 2 45 23 32 2 2 4 1 5 5 2 [li0924@localhost awk]$ awk '{for (i=1;i<=NF;i++) s=s+$i; print $0,s;s=0}' d.txt 1 2 4 5 2 6 4 43 23 90 3 4 5 3 42 2 4 2 45 110 23 32 2 2 4 1 5 5 2 76 [li0924@localhost awk]$ awk '{for(i=1;i<=NF;i++){a[NR]+=$i} print $0,a[NR];delete a}' d.txt 1 2 4 5 2 6 4 43 23 90 3 4 5 3 42 2 4 2 45 110 23 32 2 2 4 1 5 5 2 76
测试都OK!
【解析】
第1种方法;可能是最容易想到的;在这就不讲了;我们知道awk的数组是很强大的;干嘛不用数组来实现呢;a[NR]表示每行的和;NR是读入的行数;而delete a;是删除数组!把数组清零!这样下一行执行时;还是从0开始!

浙公网安备 33010602011771号