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