【问题标题】:Removing rows with same values [duplicate]删除具有相同值的行[重复]
【发布时间】:2017-03-02 05:51:05
【问题描述】:

我有一个大的制表符分隔的文本文件,我想删除所有具有相同值的行并提取具有至少一个不同值的行;

文件.txt

Gen1    1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
Gen2    1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
Gen3    1.0 1.0 1.0 5.0 0.55    1.0 1.0 1.0 1.0
Gen4    1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
Gen5    1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
Gen6    0.4353  1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

输出.txt

Gen3    1.0 1.0 1.0 5.0 0.55    1.0 1.0 1.0 1.0
Gen6    0.4353  1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

很遗憾,我无法使用以下命令获得预期的输出;

perl -ne 'print if ! $a{$_}++'

或者 sort -uuniq,它们不起作用,因为第一列的名称不同。

【问题讨论】:

  • 您能否澄清 Gen1、2、4、5 行不是输出的一部分,因为这些行中的所有值都具有相同的值?您的预期输出与您接受的答案不匹配...
  • 有趣的是,关于“删除具有相同值的行”的问题是如何作为重复而关闭的。 :D
  • 当它不是重复的(至少不是标记为一个的那个)时也是如此......有人可以重新打开这个问题吗?

标签: bash sorting duplicates text-processing


【解决方案1】:

sort 使用从第二个字段到结尾的选定键 (-k2):

sort -t '\t' -uk2 file.txt
  • -t '\t' 将字段分隔符设置为制表符

  • -u 根据所选键获取唯一条目

示例:

% sort -uk2 file.txt
Gen6 0.4353 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
Gen1 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
Gen3 1.0 1.0 1.0 5.0 0.55 1.0 1.0 1.0 1.0

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 2015-11-30
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2019-06-30
    • 2018-02-08
    • 1970-01-01
    相关资源
    最近更新 更多