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值放在当前字段的前面。