awk删除具有多个重复列字段但在其他列字段中具有特定模式的行

awk删除具有多个重复列字段但在其他列字段中具有特定模式的行,awk,sed,Awk,Sed,基本上,如果前三列具有相同的值,我希望保留所有没有第四列值的行。在这种情况下,我想删除第一行,但保留下两行 A B C - A B C D1 A B C D2 AA BB CC D3 AB BC CD D4 FA FB FC - GA GB GC DN 预期产出: A B C D1 A B C D2 AA BB CC D3 AB BC CD D4 FA FB FC - GA GB GC DN 我能理解 awk

基本上,如果前三列具有相同的值,我希望保留所有没有第四列值的行。在这种情况下,我想删除第一行,但保留下两行

   A B C -
   A B C D1
   A B C D2
   AA BB CC D3
   AB BC CD D4
   FA FB FC -
   GA GB GC DN
预期产出:

   A B C D1
   A B C D2
   AA BB CC D3
   AB BC CD D4
   FA FB FC -
   GA GB GC DN
我能理解

   awk '!(seen[$1,$2,$3]++  && $4 == "-")'
不删除任何行,但如何修改条件以便删除第一行


我仍然想保留“FA FB FC-”,因为没有其他行的前3列是“FA FB FC”。

要删除第4个字段为
-
的行,您只需执行以下操作即可

awk 'FNR==NR{a[$1,$2,$3]++;next} a[$1,$2,$3]>1 && $4=="-"' Input_file Input_file
这可能适用于您(GNU-sed):


将下一行追加到当前行,如果第一行的前三个字段与第二行的前三个字段匹配,并且第一行的第四个字段为
-
,则删除第一行并重复。但是,如果第一行的前三个字段与第二行的前三个字段匹配,并且第二行的第四个字段为
-
,则用第一行替换两行并重复。否则,请打印,然后删除第一行并重复。

请添加您为解决自己的问题所付出的努力。另外,您的问题不清楚,请添加更多详细信息。对不起,这不是StackOverflow的工作方式。形式为“我想做X,请给我提示和/或示例代码”的问题被认为是离题的。请访问并阅读,特别是阅读感谢您的努力。现在还不是clear@td17您需要有3个列值相同,并且字段数应该等于或大于4,对吗?前3个字段的用途是什么?你可以检查最后一个字段。编辑了这篇文章,希望它更有意义。@RavinderSingh13再次感谢。我只想删除第4个字段值为“-”的行,如果有另一列具有相同的前3列值。@td17,好的,现在我知道了,请检查我编辑的解决方案,让我知道,注意输入文件在这里被读取了2次。谢谢!这很有效。我做了一些改变,因为我想保留第2-4行:awk'FNR==NR{a[$1,$2,$3]++;next}!(a[$1,$2,$3]>1&&$4==“-”)@td17,请看这里一次,一旦得到答案,该怎么办,干杯。
sed -E ':a;N;/^(\s*(\s\S+){3})\s-\n\1/D;s/^((\s*(\s\S+){3}).*)\n\2\s-$/\1/;ta;P;D' file