【发布时间】:2018-04-23 16:50:57
【问题描述】:
我有多个文件,内容如下:
==> file1.tab <==
Contig Position TS-568_ALLELE TS-568_FREQUENCY TS-568_COVERAGE
ch00 11009393 A/C 0.02/0.97 93
ch00 11009395 A/C/T 0.01/0.97/0.01 96
ch00 11009416 A/G/T 0.12/0.83/0.04 97
ch00 11009421 A/G 0.17/0.82 97
ch00 11009427 A/C/T 0.02/0.96/0.00 101
ch01 11009436 C/T 0.99/0.00 103
ch01 11009437 G/T 0.00/0.99 104
ch02 11009441 A/G 0.07/0.92 101
ch02 11009445 G 1.0 96
==> file2.tab <==
Contig Position TS-602_ALLELE TS-602_FREQUENCY TS-602_COVERAGE
ch00 11009393 C 1.0 7
ch00 11009395 C 1.0 7
ch00 11009416 G 1.0 5
ch00 11009421 G 1.0 5
ch00 11009427 C 1.0 4
ch01 11009436 C 1.0 4
ch01 11009437 T 1.0 4
ch02 11009441 G 1.0 5
ch02 11009445 G 1.0 5
==> file3.tab <==
Contig Position TS-586_ALLELE TS-586_FREQUENCY TS-586_COVERAGE
ch00 11009393 C 1.0 34
ch00 11009395 C 1.0 35
ch00 11009416 A/G/T 0.07/0.89/0.02 39
ch00 11009421 A/G 0.10/0.89 39
ch00 11009427 A/C 0.02/0.97 37
ch01 11009436 C 1.0 44
ch01 11009437 T 1.0 44
ch02 11009441 A/G 0.06/0.93 45
ch02 11009445 G 1.0 44
我阅读了关于加入 bash 的信息,但我的问题是我需要根据前两个列而不是单个列来加入它们(ch00 11009427 是唯一标识符,ch01 11009427 或 ch03 11009427 也可以在列表)。
所以,预期的输出将是:
==> file_all.tab <==
Contig Position TS-568_ALLELE TS-568_FREQUENCY TS-568_COVERAGE TS-602_ALLELE TS-602_FREQUENCY TS-602_COVERAGE TS-586_ALLELE TS-586_FREQUENCY TS-586_COVERAGE
ch00 11009393 A/C 0.02/0.97 93 C 1.0 7 C 1.0 34
ch00 11009395 A/C/T 0.01/0.97/0.01 96 C 1.0 7 C 1.0 35
ch00 11009416 A/G/T 0.12/0.83/0.04 97 G 1.0 5 A/G/T 0.07/0.89/0.02 39
ch00 11009421 A/G 0.17/0.82 97 G 1.0 5 A/G 0.10/0.89 39
ch00 11009427 A/C/T 0.02/0.96/0.00 101 C 1.0 4 A/C 0.02/0.97 37
ch01 11009436 C/T 0.99/0.00 103 C 1.0 4 C 1.0 44
ch01 11009437 G/T 0.00/0.99 104 T 1.0 4 T 1.0 44
ch02 11009441 A/G 0.07/0.92 101 G 1.0 5 A/G 0.06/0.93 45
ch02 11009445 G 1.0 96 G 1.0 5 G 1.0 44
文件根据第 1 列和第 2 列进行排序,并且它们之间的行数相等。其中大约有 150 个文件,总大小为 6.5 GB
【问题讨论】:
-
你尝试过类似
join -j 2 -o 1.1,1.2,1.2,1.4,1.5,2.3,2.4,2.5 file file1的方法吗? -
@revo 不会只加入第二个字段,而忽略第一个字段吗? (例如,
ch00 11009427和ch01 11009427的两条线不会连接在一起吗?) -
@revo 我做到了,但这会在第 2 列中加入具有相同索引的所有行组合,因此:如果您有 ch00 11009427 和 ch01 11009427 它们将在结果中出现两次作为每个行组合。更何况这不是很实用的解决方案,如果你想加入 150 个文件...