como copiar uma coluna de outro arquivo quando as correspondências do ID (vários arquivos em cada pasta)

0

Acabei de encontrar uma pergunta. É muito semelhante ao que eu já perguntei antes como copiar uma coluna de outro arquivo quando o ID corresponde a , com algumas diferenças.

Eu tenho uma pasta (folder1), com vários arquivos:

desired_pos142535974
desired_pos142540918
desired_pos142541687
desired_pos142541814
desired_pos142541910
desired_pos142542976

o arquivo principal se parece com isso

head desired_pos142535974
1   142535974   196 HG00100
1   142535974   64 HG00101
1   142535974   63 HG00103
1   142535974   26 HG00108
1   142535974   85 HG00110
1   142535974   83 HG00114
1   142535974   148 HG00115

Eu tenho outra pasta (folder2)

desired_output_pos142535974_g
desired_output_pos142540918_g
desired_output_pos142541687_g
desired_output_pos142541814_g
desired_output_pos142541910_g
desired_output_pos142542976_g

cada arquivo na pasta2 se parece com isso

head desired_output_pos142535974_g
    HG00096 0|1
    HG00097 1|0
    HG00099 0|1
    HG00100 1|0
    HG00101 0|1
    HG00102 0|1
    HG00103 1|1

cada arquivo na pasta 1 tem um arquivo idêntico na pasta 2 com o mesmo ID "pos ...." (por exemplo, desejado_pos142535974 e desired_output_pos142535974_g ambos pertencem ao mesmo indivíduo).

Portanto, desta vez quero verificar se a última coluna de um arquivo na pasta 1 corresponde à primeira coluna de um arquivo na pasta 2 com o ID "pos" idêntico, adicione a segunda coluna do arquivo 2 ao arquivo1, terminando com algo como

head desires_pos142535974
1   142535974   196 HG00100  1|0
1   142535974   64 HG00101   0|1
1   142535974   63 HG00103   1|1
    
por Anna1364 07.05.2018 / 20:00

1 resposta

1

Eu vejo que o único problema que você pode enfrentar é que você deseja alimentar o mesmo nome de arquivo. Aqui vai:

$ find /path/to/dir1 -type f -name 'desired_pos*' -exec sh -c '
    awk "FNR==NR{seen[\]=\; next} seen[\$NF]{print \
$ find /path/to/dir1 -type f -name 'desired_pos*' -exec sh -c '
    awk "FNR==NR{seen[\]=\; next} seen[\$NF]{print \%pre%, seen[\$NF]}" \
        ./path/to/dir2/desired_output_${1#*_}_g $1 >/log/to/file/desires_${1#*_}' _ {} \;
1   142535974   196 HG00100 1|0
1   142535974   64 HG00101 0|1
1   142535974   63 HG00103 1|1
, seen[\$NF]}" \ ./path/to/dir2/desired_output_${1#*_}_g $1 >/log/to/file/desires_${1#*_}' _ {} \; 1 142535974 196 HG00100 1|0 1 142535974 64 HG00101 0|1 1 142535974 63 HG00103 1|1

find apenas arquivos -type f localizados em /path/to/dir1 caminho cujo nome começa com desired_pos* ( * significa seguido por nada ou nenhum) e, em seguida, faça o mesmo conforme explicado aqui ; só aqui arquivo2 é o arquivo em /path/to/dir2/desired_output_xxx e $1 depois disso é arquivo1 encontrado em /path/to/dir1 em que ambos os arquivos têm pos# partes iguais. ${1#*_} está retornando a mesma parte que remove a menor correspondência de arquivo1 para o primeiro _ visto.

    
por 07.05.2018 / 21:10