根据另一个AWK中的模式对一列进行求和

时间:2016-05-11 09:36:35

标签: awk

我的输入文件如下:

scaffold100 115050  116050  1000    115050  124008  2
scaffold100 1167811 1168811 1000    1167811 1568661 0
scaffold100 151385  152385  1000    151385  193501  4
scaffold100 1585695 1586695 2000    1585695 1644609 5
scaffold100 1654143 1655143 2000    1654143 1673659 3
scaffold100 1711976 1712976 2000    1711976 1843374 1

我正在学习AWK,我想用它来根据第4列对第7列求和。 也就是说,如果第4列等于1000,则总结2 + 0 + 4 = 6并打印。

我正在使用这段代码,但我不明白我做错了什么:

awk '{if($4==1000) {sum+=$7;n++}END{print sum}}' file

2 个答案:

答案 0 :(得分:2)

您可以使用此awk

awk '$4==1000{sum+=$7}END{print sum+0}' file

输出:

$ awk '$4==1000{sum+=$7}END{print sum+0}' a
6

另一个awk

awk '{arr[$4]+=$7}END{for(val in arr){print val,arr[val]}}' file

输出:

$ awk '{arr[$4]+=$7}END{for (val in arr) {print val,arr[val]}}' a
2000 9
1000 6

答案 1 :(得分:1)

你的开口和闭合花括号有点混乱。

$ cat data 
scaffold100 115050  116050  1000    115050  124008  2
scaffold100 1167811 1168811 1000    1167811 1568661 0
scaffold100 151385  152385  1000    151385  193501  4
scaffold100 1585695 1586695 2000    1585695 1644609 5
scaffold100 1654143 1655143 2000    1654143 1673659 3
scaffold100 1711976 1712976 2000    1711976 1843374 1
$ awk 'BEGIN{sum=0}{if($4==1000) {sum+=$7}}END{print sum}' data
6

$awk '$4==1000 {sum+=$7} END{print sum}' data
6