我有多个文件(~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
$