【问题标题】:How to combine column from multiple text files? [duplicate]如何合并来自多个文本文件的列? [复制]
【发布时间】:2016-04-05 01:12:20
【问题描述】:

我想从一堆文本文件中提取某一列并将其组合成一个文件,如图所示。

File1_example.txt

A   123   1
B   234   2
C   345   3
D   456   4

File2_example.txt

A   123   5
B   234   6
C   345   7
D   456   8

File3_example.txt

A   123   9
B   234   10
C   345   11
D   456   12

...

..

.

File100_example.txt

A   123   55
B   234   66
C   345   77
D   456   88

如何循环浏览我感兴趣的文件并将这些列粘贴在一起,以便最终结果如下所示,而无需输入 1000 个唯一文件名?

1   5   9   ...  55
2   6   10  ...  66
3   7   11  ...  77
4   8   12  ...  88

【问题讨论】:

  • @KenWhite 我正在尝试找到一种方法来加入这些文件,而无需输入数百个独特的文件名。
  • 所有文件的长度都一样吗?
  • @BenjaminW。是的,长度都一样

标签: bash shell


【解决方案1】:

试试这个:

paste File[0-9]*_example.txt | awk '{i=3;while($i){printf("%s ",$i);i+=3}printf("\n")}'

示例:
文件1_example.txt:

A   123   1
B   234   2
C   345   3
D   456   4

文件2_example.txt:

A   123   5
B   234   6
C   345   7
D   456   8

运行命令为:

$ paste File[0-9]*_example.txt | awk '{i=3;while($i){printf("%s ",$i);i+=3}printf("\n")}'

输出:

1 5 
2 6 
3 7 
4 8

【讨论】:

    【解决方案2】:

    我用前 3 个文件

    测试了下面的代码
    cat File*_example.txt  | awk '{a[$1$2]= a[$1$2] $3 " "} END{for(x in a){print a[x]}}' | sort
    
    1 5 9
    2 6 10
    3 7 11
    4 8 12
    

    1) 使用 awk 数组,a[$1$2]= a[$1$2] $3 " " 索引为 column1 和 column2,数组值追加所有第 3 列。

    2) END{for(x in a){print a[x]}} 遍历数组 a 并打印所有值。

    3) 使用sort 对输出进行排序。

    【讨论】:

      【解决方案3】:

      cating 您需要确保文件顺序被保留时,一种方法是明确指定文件

      cat File{1..100}_example.txt | awk '{print $NF}' | pr 4ts' '
      

      通过awk 提取最后一列并使用pr 对齐

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-29
        • 1970-01-01
        • 2017-05-01
        • 1970-01-01
        • 2021-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多