我已经为此做了几次尝试,但显然遗漏了一些东西并需要帮助。
我有一个包含数千行信息的大表,我正在尝试根据第 3、4 和 6 列将它们分类。我已经按这些列对行进行了排序,现在只想执行以下操作:
如果第 3 列=前行第 3 列 && 第 4 列 < 前行第 5 列 && 第 6 列 = 前行第 6 列;然后打印该行,但用第一个匹配的行号修改开头;否则打印该行但用当前行号修改开头
这是我充满错误的糟糕方法:
awk -F, 'BEGIN { OFS = FS } {if ($4<prev5 && $3==prev3 && $6==prev6) print Marker,$0;else Marker=NR print NR,$0; prev5=$5; prev3=$3; prev6=$6}'
示例输入(为便于查看,用逗号分隔):
a,b,2,15,50,ABBA
a,a,2,26,55,ABBA
b,a,2,80,99,ABA
c,a,3,20,40,CAN
a,b,3,51,300.CAN
a,a,4,1000,2000,ART
d,c,4,1700,2050,ART
b,a,4,1800,2051,ART
示例输出:
1,a,b,2,15,50,ABBA
1,a,a,2,26,55,ABBA
3,b,a,2,80,99,ABA
4,c,a,3,20,40,CAN
5,a,b,3,51,300.CAN
6,a,4,1000,2000,ART
6,c,4,1700,2050,ART
6,b,a,4,1800,2051,ART
我只是想按照给定的标准对这些行进行分组,因此组标识符不需要使用我建议的行号方法,如果有更好的方法来做到这一点。
我真的希望有人能提供帮助,因为我总是热衷于改进我所知道的基本代码,所以,如果可能的话,请提供解释,因为我想从我的错误中吸取教训!
您可以通过将代码分散到多行来使其更具可读性:
输出