【问题标题】:Best way to remove duplicated columns in linux在linux中删除重复列的最佳方法
【发布时间】:2017-11-07 05:34:25
【问题描述】:

应该像运行 uniq 命令一样,但是按列。例如:

A B C B
A C B C
啊啊啊啊

第二列和第四列是相同的。获得以下结果的最佳方法是什么?

A B C
A C B
啊啊啊

但是,一开始不知道哪些列是相同的,这与用于行的 uniq 命令非常相似。

【问题讨论】:

  • 如果列是唯一的,那么最后一列不应该是“A”而不是“A A A”吗?

标签: bash shell command uniq


【解决方案1】:

Perl 来救援!

perl -lane '
    push @{ $c[$_] }, $F[$_] for 0 .. $#F;
    }{
    for (@c) {
        $s = join "|", @$_;
        $seen{$s}++ or push @r, $_;
    }
    print join " ", map shift @$_, @r while @{ $r[0] }
    ' -- inputfile

第一行旋转输入,即它创建以下结构:

@c = ( [ 'A', 'A', 'A' ],
       [ 'B', 'C', 'A' ],
       [ 'C', 'B', 'A' ],
       [ 'B', 'C', 'A' ] );

}{(称为“爱斯基摩人问候语”)将每一行的代码运行与整个输入处理完毕后运行的代码分开。它遍历@c 数组并仅保留唯一列(通过从每个列创建一个字符串,如A|A|AB|C|A 等,并将它们存储在%seen 哈希中。

结构将是

@r = ( [ 'A', 'A', 'A' ],
       [ 'B', 'C', 'A' ],
       [ 'C', 'B', 'A' ] );

哈希看起来像

%seen = ( 'B|C|A' => 2,
          'A|A|A' => 1,
          'C|B|A' => 1
);

最后一次打印移动每列的第一个元素,即将结果转回。

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2020-08-03
    • 2018-11-01
    相关资源
    最近更新 更多