【发布时间】:2017-07-17 13:16:49
【问题描述】:
我有一个包含数字的文件,我想对两行中的数字求和,然后为每一列求和,然后在最后一步中,我想过滤掉计数大于或等于 3 的“0”的行对总和很重要。我写了一个小例子来说明清楚:
这是我的文件(没有 cmets ofc),它包含 5 列的 2 对行(=4 行)。
2 6 0 8 9 # pair 1.A
0 1 0 5 1 # pair 1.B
0 2 0 3 0 # pair 2.A
0 0 0 0 0 # pair 2.B
我需要总结成对的线,所以我得到了这样的东西(中间步骤)
2 7 0 13 10 # sum pair 1, it has one 0
0 2 0 3 0 # sum pair 2, it has three 0
然后我想打印原始行,但只打印那些 0(两行之和)之和小于 3 的行,因此我应该打印这个:
2 6 0 8 9 # pair 1.A
0 1 0 5 1 # pair 1.B
因为第二对行之和有三个0,所以应该排除
所以我需要从第一个文件中获取最后一个输出。
到目前为止,我能够做的是对行求和,计数零,并识别计数低于 0 的 3 的行,但我不知道如何打印导致SUM,我只能打印两行之一(最后一行)。这是我正在使用的 awk:
awk '
NR%2 { split($0, a); next }
{ for (i=1; i<=NF; i++) if (a[i]+$i == 0) SUM +=1;
if (SUM < 3) print $0; SUM=0 }' myfile
(这就是我现在得到的)
0 1 0 5 1 # pair 1.B
谢谢!
【问题讨论】: