在bash中按列组合文件与条件

时间:2015-09-26 16:23:26

标签: bash awk concatenation paste

我想在bash中按列合并多个txt个文件。每个文件的名称都为File,后跟一个数字。因此,File1.txt File2.txt File3.txt等等。以下3个文件作为示例(但我有几个)。

File1中:

######## infx infx infx
######## infx infx infx
####### infx infx 
probeset_id sample1 sample2 sample3
PR01           1       2       0
PR02           -1      2       0
PR03            2      1       1
PR04           1       2       1
PR05           2       0       1'

文件2:

######## infx infx infx
######## infx infx infx
probeset_id sample4 sample5 sample6
PR01           2       2       1
PR02           2      -1       0
PR03            2      1       1
PR04           1       2       1
PR05           0       0       1'

文件3:

# The dfn 
######## infx infx infx
######## infx infx infx
probeset_id samplen1 samplen2 samplen3
PR01           2       -1       1
PR02           1      -1       0
PR03            2      1       1
PR04           1       2       -1
PR05           0       2       1'

完成以下output.txt:

 $ head output.txt
      probeset_id sample1 sample2 sample3 sample4 sample5 sample6 samplen1 samplen2 samplen3
    1        PR01       1       2       0       2       2       1        2       -1        1
    2        PR02      -1       2       0       2      -1       0        1       -1        0
    3        PR03       2       1       1       2       1       1        2        1        1
    4        PR04       1       2       1       1       2       1        1        2       -1
    5        PR05       2       0       1       0       0       1        0        2        1

PS。 ##的行数可以在文件之间有所不同。有什么想法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

你可以使用下一个命令

join <(grep -v "^#" file1) <(grep -v "^#" file2) | 
join - <(grep -v "^#" file3) | awk '{print (NR>1?NR-1:""), $0}'

你得到了

 probeset_id sample1 sample2 sample3 sample4 sample5 sample6 samplen1 samplen2 samplen3
1 PR01 1 2 0 2 2 1 2 -1 1
2 PR02 -1 2 0 2 -1 0 1 -1 0
3 PR03 2 1 1 2 1 1 2 1 1
4 PR04 1 2 1 1 2 1 1 2 -1
5 PR05 2 0 1 0 0 1 0 2 1