如何组合多个文本文件中的列?

时间:2016-04-05 01:12:20

标签: bash shell

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

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

3 个答案:

答案 0 :(得分:2)

试试这个:

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

示例:
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

将命令运行为:

$ 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

答案 1 :(得分:1)

我使用前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]}} travesrsed数组a并打印所有值。

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

答案 2 :(得分:1)

cat你需要确保保留文件顺序时,一种方法是明确指定文件

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

awk提取最后一列,并使用pr

对齐