perl - 对 grep 命令的结果进行分组

标签 perl unix sed awk grep

我一直在使用 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 中的任何选项可以实现这一目标? 谢谢

最佳答案

你需要 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

关于perl - 对 grep 命令的结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11086448/

相关文章:

c - 绑定(bind)到 C 中的特定 IP for ubuntu

regex - 用注释替换字符串的特定出现

perl - 超时后如何终止 Perl 系统调用?

regex - 序列 (? 正则表达式不完整 - 负面环视

perl - 在 Perl 中隐藏 Twitter token

perl - "lock"在 Perl 中究竟做了什么?

linux - 使用 awk 或 sed 基于公共(public)列组合两个 csv 文件

linux - Unix:stat程序(大小:8)

regex - 如何使用 sed 或 awk 基于模式匹配创建多个文件

linux - 根据linux中的文件名更改文件中的某个数字