我一直在使用grep -f
从一个文件中获取模式并从另一个文件中提取行。
结果如下:
1 11294199 11294322 40 10 123 0.0813008
1 11294199 11294322 41 6 123 0.0487805
1 11294199 11294322 42 10 123 0.0813008
1 11294199 11294322 43 2 123 0.0162602
1 11293454 11293544 51 1 90 0.0111111
1 11293454 11293544 52 2 90 0.0222222
1 11291356 11291491 54 6 135 0.0444444
1 11291356 11291491 55 8 135 0.0592593
1 11291356 11291491 56 3 135 0.0222222
现在我需要根据前三列对结果进行分组,并为每个组计算第4列的总和:
1 11294199 11294322 (40+41+42+43)
1 11293454 11293544 (51+52)
1 11291356 11291491 (54+55+56)
我怎样才能得到这样的结果? grep中的任何选项都能实现这一目标吗? THX
答案 0 :(得分:5)
您需要awk
来做您想做的事。试试这个:
awk '{ array[$1 "\t" $2 "\t" $3] += $4 } END { for (i in array) print i "\t" array[i] }' file.txt
结果:
1 11294199 11294322 166
1 11291356 11291491 165
1 11293454 11293544 103
HTH