linux下如何将多个文件的同行数据合并成一个文件的多列

假如有三个文件,file1.txt, file2.txt, file3.txt,如下所示

file1.txt

2.7	-3.30164
2.8	-5.75132
2.9	-7.30702
3.0	-8.19636
3.1	-8.59629
3.2	-8.64362
3.3	-8.44339
3.4	-8.07568
3.5	-7.60091
3.6	-7.06418
3.7	-6.49867

file2.txt

2.7	-6.60328
2.8	-11.50264
2.9	-14.61404
3.0	-16.39272
3.1	-17.19258
3.2	-17.28724
3.3	-16.88678
3.4	-16.15136
3.5	-15.20182
3.6	-14.12836
3.7	-12.99734

file3.txt

2.7	-6.60328
2.8	-11.50264
2.9	-14.61404
3.0	-16.39272
3.1	-17.19258
3.2	-17.28724
3.3	-16.88678
3.4	-16.15136
3.5	-15.20182
3.6	-14.12836
3.7	-12.99734

现在想将三个文件中的数据进行对比,所以希望将它们处理到一个文件中,分别处于不同的列,如下所示:

2.7	-3.30164	-6.60328	-9.90492
2.8	-5.75132	-11.50264	-17.25396
2.9	-7.30702	-14.61404	-21.92106
3.0	-8.19636	-16.39272	-24.58908
3.1	-8.59629	-17.19258	-25.78887
3.2	-8.64362	-17.28724	-25.93086
3.3	-8.44339	-16.88678	-25.33017
3.4	-8.07568	-16.15136	-24.22704
3.5	-7.60091	-15.20182	-22.80273
3.6	-7.06418	-14.12836	-21.19254
3.7	-6.49867	-12.99734	-19.49601

方法极其简单!只要使用paste命令就可以了,具体使用如下所示:

$ paste file1.txt file2.txt file3.txt > result.txt

那么结果文件result.txt中的内容就会如下所示:

2.7	-3.30164	2.7	-6.60328	2.7	-9.90492
2.8	-5.75132	2.8	-11.50264	2.8	-17.25396
2.9	-7.30702	2.9	-14.61404	2.9	-21.92106
3.0	-8.19636	3.0	-16.39272	3.0	-24.58908
3.1	-8.59629	3.1	-17.19258	3.1	-25.78887
3.2	-8.64362	3.2	-17.28724	3.2	-25.93086
3.3	-8.44339	3.3	-16.88678	3.3	-25.33017
3.4	-8.07568	3.4	-16.15136	3.4	-24.22704
3.5	-7.60091	3.5	-15.20182	3.5	-22.80273
3.6	-7.06418	3.6	-14.12836	3.6	-21.19254
3.7	-6.49867	3.7	-12.99734	3.7	-19.49601

中间会多余几列,可以手动删除,也可以使用awk命令删除,下面是示例代码。

paste 1nn/result.txt 2nn/result.txt chen/result.txt > ttmp.txt
awk '{printf "%8.6f\t%8.6f\t%8.6f\t%8.6f\n",$1,$2,$4,$6}' ttmp.txt > result.txt

标签: linux shell

相关文章推荐

添加新评论 (无需注册,可直接评论)