合并选定的列多文件

合并选定的列多文件

我有多个文件(~15),每个文件都有多列数据(制表符分隔)。例如:

文件1

aa1    399     1815
aa2    1908    4064
aa3    4523    5656

文件2

bb1    5304317    5305057
bb2    5305057    5305824
bb3    5306871    5307875

ETC。

我想读取每个文件的第二列并将它们并排打印,以创建 15 列输出。例如:

输出

399     5304317    7526    12455
1908    5305057    8195    14538
4523    5306871    9216    15150

每列都来自不同的文件。注意第一列输出是第二列文件1,第二列输出是第二列文件2

我想到了使用粘贴。但它放置了每个输入文件中的全部数据。如何才能做到这一点?

答案1

对于 3 个文件,每个文件有 3 列,您可以使用如下内容:

pr -m -t -s file1 file2 file3|awk '{printf("%s\t%s\t%s\n",$2,$5,$8)}'

您还可以用一些可以计算文件数量和每个文件字段数量的东西来包装它,但这应该给您一个开始。

答案2

如果你不介意的话,你可以这样做

for file in $(ls File*); do
  awk '{print $2}' < $file > $file.col2
done
pr -m -s *.col2 > merged.txt
rm -f *.col2

答案3

或许paste最终证明是合适的?

$ paste <(cut -f2 file1) <(cut -f2 file2) <(cut -f2 file3) <(cut -f2 file4)
399     5304317 7526    12455
1908    5305057 8192    14538
4523    5306871 9216    15150
$

相关内容