我想在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。 ##
的行数可以在文件之间有所不同。有什么想法解决这个问题吗?
答案 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