Isso deve ser feito:
join -j 2 -o 1.1,1.2,1.3,2.3 file1 file2
Importante : isso pressupõe que seus arquivos estejam classificados (como no seu exemplo) de acordo com o nome do SNP. Se não estiverem, classifique-os primeiro:
join -j 2 -o 1.1,1.2,1.3,2.3 <(sort -k2 file1) <(sort -k2 file2)
Saída:
0 AFFX-SNP-000541 NA 1
0 AFFX-SNP-002255 NA 1
1 rs12103 0.6401 0.5596
1 rs12103_1247494 0.696 0.5581
1 rs12142199 0.7672 0.4931
Explicação (de info join
):
'join' writes to standard output a line for each pair of input lines that have identical join fields.
'-1 FIELD'
Join on field FIELD (a positive integer) of file 1.
'-2 FIELD'
Join on field FIELD (a positive integer) of file 2.
'-j FIELD'
Equivalent to '-1 FIELD -2 FIELD'.
'-o FIELD-LIST'
Otherwise, construct each output line according to the format in
FIELD-LIST. Each element in FIELD-LIST is either the single
character '0' or has the form M.N where the file number, M, is '1'
or '2' and N is a positive field number.
Assim, o comando acima junta os arquivos no segundo campo e imprime o primeiro, segundo e terceiro campo do arquivo um, seguido pelo terceiro campo do arquivo2.