【发布时间】:2016-12-26 13:54:58
【问题描述】:
我有 3 个以空格分隔的文件。
文件 1(file1.txt):
FID IID SEX PHENOTYPE KIR2DL5 KIR2DS5
A1 A1 0 1 1 2
A2 A2 1 2 1 2
A3 A3 0 1 1 1
文件 2 (file2.txt):
FID Bw4
A1 2
A2 1
A3 1
文件 3(file3.txt):
FID IID INFO
A1 A1 0.4
A2 A2 0.6
A3 A3 0.2
如果FID列中的值在3个文件之间相同,我想将3个文件合并到一个文件中,以便:
FID IID SEX PHENOTYPE KIR2DL5 KIR2DS5 Bw4 INFO
A1 A1 0 1 1 2 2 0.4
A2 A2 1 2 1 2 1 0.6
A3 A3 0 1 1 1 1 0.2
我知道我可以使用以下命令合并文件:
join file1.txt file2.txt | join - file3.txt > final.txt
但是通过使用此命令,它还添加了文件 3 中的 IID 列,因此出现了两次,如下所示:
FID IID SEX PHENOTYPE KIR2DL5 KIR2DS5 Bw4 IID INFO
A1 A1 0 1 1 2 2 A1 0.4
A2 A2 1 2 1 2 1 A1 0.6
A3 A3 0 1 1 1 1 A1 0.2
有没有办法加入这 3 个文件而不用两次这个列?
重要信息:
并非所有 FID 在这 3 个文件之间都是相同的。
文件 1 中的列数可以更改
【问题讨论】:
-
file3 的列数是静态的吗?如果是,您可以删除 file3 的第二列(请参阅
man colrm)。使用 bash process substitution:join file1.txt file2.txt | join - <(colrm 2 < file3.txt) -
"我知道我可以像这样使用 awk 合并文件:" ??没有显示 awk 代码 ;-) 祝你好运!
标签: bash join merge header-files