Bash 将计数文件合并到一个文件中并保持零值

Bash 将计数文件合并到一个文件中并保持零值,bash,awk,file-processing,Bash,Awk,File Processing,我有多个计数文件,如下所示: File1.tab 6 10 0 49 0 53 15 0 15 0 0 0 0 0 0 0 0 0 10 1 10 1 0 0 0 0 0 0 0 0 0 0 其他文件: File2.tab 3 1 2 29 0 29 4 0 4

我有多个计数文件,如下所示:

 File1.tab
 6       10      0
 49      0       53
 15      0       15
 0       0       0
 0       0       0
 0       0       0
10 1
10 1
0 0
0 0
0 0
0 0
0 0
其他文件:

File2.tab
 3       1       2
 29      0       29
 4       0       4
 0       0       0
 0       0       0
 0       0       0
我有30多个文件,我想把每个文件的第二列合并成一个大文件

我知道这个问题已经被问过了,我在这里发现了一个类似的问题

我用上一个问题的答案来回答我的问题:

paste  *.tab | awk '{i=2;while($i); {printf("%d ",$i);i+=3}printf("\n")}'
问题是没有打印零值,我得到如下结果:

 File1.tab
 6       10      0
 49      0       53
 15      0       15
 0       0       0
 0       0       0
 0       0       0
10 1
10 1
0 0
0 0
0 0
0 0
0 0
我想要这样的东西:

 File1.tab
 6       10      0
 49      0       53
 15      0       15
 0       0       0
 0       0       0
 0       0       0
10 1
10 1
0 0
0 0
0 0
0 0
0 0
我检查了printf格式说明符,但没有一个有效。我如何解决这个问题?

您选择了一个糟糕的“答案”来构建。试试这个:

paste  *.tab |
awk '{for (i=2; i<=NF; i+=3) printf "%s%s", (i>2?OFS:""), $i; print ""}'
粘贴*.tab|
awk'{for(i=2;i2?OFS:),$i;print'}

谢谢Ed Morton。你的答案有效。你能解释更多关于代码的信息吗?这部分(i>2)是三元运算符(参见)。对于第一个字段之后的每个字段,它将OFS值放在当前字段的前面。