基于另一AWK中的模式求和一列

基于另一AWK中的模式求和一列,awk,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 1655

我的输入文件如下:

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

你的开始和结束花括号有点混乱

$ 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


你的开始和结束花括号有点混乱

$ 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

awk '$4==1000{sum+=$7}END{print sum+0}' file
awk '{arr[$4]+=$7}END{for(val in arr){print val,arr[val]}}' file
输出:

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

awk '$4==1000{sum+=$7}END{print sum+0}' file
awk '{arr[$4]+=$7}END{for(val in arr){print val,arr[val]}}' file
输出:

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

您可以使用此
awk

awk '$4==1000{sum+=$7}END{print sum+0}' file
awk '{arr[$4]+=$7}END{for(val in arr){print val,arr[val]}}' file
输出:

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

awk '$4==1000{sum+=$7}END{print sum+0}' file
awk '{arr[$4]+=$7}END{for(val in arr){print val,arr[val]}}' file
输出:

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

阅读阿诺德·罗宾斯的《有效的Awk编程》第四版。从这一点开始,你就不会对awk语法感到困惑,也不会像你贴的那样编写脚本。从这一点开始,您就不会对awk语法感到困惑,也不会像之前发布的那样编写脚本。