如何在一个输出中增量添加每个文件的输出?我想这样做,而不是对所有文件一起运行粘贴命令。这是因为我有 10k 个文件,每个文件大小为 100 GB。
文件1
a 1
b 2
c 3
文件2
a 10
b 20
c 40
文件3
a 0
b 0
c 0
所需输出
file1 file1 file2 file2 file3 file3
a 1 a 10 a 0
b 2 b 20 b 0
c 3 c 40 c 0
我知道我可以得到一些类似于所需输出的东西paste -d "\t" file{1..3}
,但我想一个接一个地执行操作,但不是全部一起执行,重要的是我想保留文件名。
答案1
paste
如果我们只需要合并文件行,命令是一个不错的选择。
前置标头行与文件名使用组合awk+粘贴:
{ for f in file*; do awk '{ for(i=1;i<=NF;i++) printf("%s\t",FILENAME); exit }' "$f"; done;
echo ""; paste -d"\t" file*; } | column -t
输出(对于 3 个输入文件):
file1 file1 file2 file2 file3 file3
a 1 a 10 a 0
b 2 b 20 b 0
c 3 c 40 c 0
细节:
{ command; command; ...}
- 用于组合多个命令的输出for f in file*;
- 对于每个文件printf("%s\t",FILENAME)
- 打印相应文件每一列的文件名exit
- 处理完第一行后立即退出