我想从一堆文本文件中提取并组合某个列到一个文件中,如图所示。
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
答案 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