从文件bash工具中删除列

时间:2017-08-18 10:33:07

标签: linux bash awk

我有一个包含大约200,000列和大约5000行的大文件。 以下是文件的简短示例,第1列和第5列重复。

Abf Bgj Csd Daa Abf Efg ...  
0   1   2   1   0   1.1   
2   0.1 1.2 0.3 2   1    
...  

以下是我需要的结果示例。原始文件中的第5列已被删除。

Abf Bgj Csd Daa Efg ...  
0   1   2   1   1.1    
2   0.1 1.2 0.3 1      
...  

有些列重复多次。 我需要使用bash工具从数据中删除重复项(保留第一个实例)。 我无法对数据进行排序,因为我需要保留订单。

1 个答案:

答案 0 :(得分:0)

您可以使用datamash计划:

datamash -W transpose < input.txt | datamash rmdup 1 | datamash transpose
  

GNU datamash是一个执行基本的命令行程序   输入文本数据的数字,文本和统计操作   文件。

<强>解释

  1. datamash -W transpose < input.txt
    • 转置 - 交换行和列。行现在是列,列是行。
    • -W - 使用空格(一个或多个空格和/或制表符)作为字段分隔符。
  2. datamash rmdup 1 - 按第一列值
  3. 删除重复行
  4. datamash transpose - 交换行和列
  5. <强>输入

    Abf Bgj Csd Daa Abf Efg
    0   1   2   1   0   1.1   
    2   0.1 1.2 0.3 2   1
    

    <强>输出

    Abf Bgj Csd Daa Efg
    0   1   2   1   1.1
    2   0.1 1.2 0.3 1