【发布时间】:2017-09-13 17:02:18
【问题描述】:
我试图过滤掉特定列中具有非唯一字符串的行,同时仅保留其他 2 列中具有最小值的那些行,当然还有那些没有重复的行。请看我的示例表:
Col1 Col2 Col3 Col4 Col5 Col6 Col7
blah blah 1 blah blah 1 BBBB
blah blah 0 blah blah 3 AAAA
blah blah 1 blah blah 3 BBBB
blah blah 2 blah blah 0 AAAA
blah blah 0 blah blah 0 AAAA
blah blah 8 blah blah 3 CCCC
Col1、Col2、Col4 和 Col5 并不重要,只需复制即可。如果 Col7 中的一个字符串出现不止一次,那么在所有出现中,我只想打印 Col3 中具有最低值的行,然后,如果有平局 >,Col6 中的最小值。最后,我想添加一个新列,上面写着“唯一”或“多”,指定是否有重复。
我想要的输出是这样的:
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8
blah blah 0 blah blah 0 AAAA multi
blah blah 1 blah blah 1 BBBB multi
blah blah 8 blah blah 3 CCCC unique
到目前为止,我已经尽力使用 awk。我可以找到所有带有重复字符串的行,并将它们打印在一行中,但我不知道如何在打印前对其进行过滤。
awk '{dup[$7]=dup[$7] ? dup[$7] " duplicate of " $1 : $1} END {for (x in dup) print dup[x], x}'
任何帮助将不胜感激,并且 awk 中的解决方案(请提供解释)将是首选,因为我试图更好地理解它。
为更好理解而编辑。
【问题讨论】: