如何按列删除文件内容的重复?

如何按列删除文件内容的重复?

我有一个包含以下内容的文件:

WP_021815421.1  OG5_132922  deth|YP_182312  3   -07 42.35   81.7
WP_021815427.1  OG5_128110  rbal|NP_868155  1   -55 50.72   53.2
WP_012456834.1  NO_GROUP    bsui|NP_700181  8   -53 48.18   62
WP_084606289.1  OG5_132922  aful|NP_069703  5   -28 57.00   92.6
WP_084606284.1  OG5_153487  bpse|YP_331974.1    6   -78 48.87   91.4

我想删除第二列底部的重复行(OG number)。输出不应包含包含相同OG number.

我正在使用sort -usort -k 2 -u 但它不起作用。

答案1

awk '!seen[$2]++' file

这将仅打印第二列中唯一的行。输出:

WP_021815421.1  OG5_132922  deth|YP_182312  3   -07 42.35   81.7                                                                                                                                                                          
WP_021815427.1  OG5_128110  rbal|NP_868155  1   -55 50.72   53.2                                                                                                                                                                             
WP_012456834.1  NO_GROUP    bsui|NP_700181  8   -53 48.18   62                                                                                                                                                                               
WP_084606284.1  OG5_153487  bpse|YP_331974.1    6   -78 48.87   91.4

答案2

要将排序字段限制为第二列(而不是从第二列到行尾),您必须指定结束位置:

$ sort -uk2,2  file
WP_012456834.1  NO_GROUP    bsui|NP_700181  8   -53 48.18   62
WP_021815427.1  OG5_128110  rbal|NP_868155  1   -55 50.72   53.2
WP_021815421.1  OG5_132922  deth|YP_182312  3   -07 42.35   81.7
WP_084606284.1  OG5_153487  bpse|YP_331974.1    6   -78 48.87   91.4

相关内容