Eu quero copiar linhas de um arquivo de texto para outro se ele contiver um certo padrão

0

Eu tenho um documento .txt contendo números rs (primeira coluna) e outras variantes: cabeça:

rs2925757 A 0.113329
rs10929982 T 0.113329
rs2119812 C 0.182322
rs7629805 A 0.182322
rs6771792 C 0.19062
rs11709077 G 0.157004
rs13083375 G 0.14842
rs13064760 C 0.14842
rs7638903 G 0.14842
rs4684847 C 0.14842

Eu tenho outros documentos txt parecidos com isso (com números rs na coluna 2):

--- rs181860478 30004551 C A 0.000 0.000 1.000 0 -1 -1 -1
--- rs187641010:30004588:C:A 30004588 C A 0.000 0.001 1.000 0 -1 -1 -1
--- rs678486:30004607:A:G 30004607 A G 0.204 0.961 0.983 0 -1 -1 -1
--- rs145540866:30004629:C:A 30004629 C A 0.000 0.000 1.000 0 -1 -1 -1
--- 12:30004702:C:T 30004702 C T 0.000 0.001 1.000 0 -1 -1 -1
--- 12:30004732:A:G 30004732 A G 0.000 0.099 0.999 0 -1 -1 -1
--- exm-rs147708347 30004743 A C 0.001 0.965 1.000 0 -1 -1 -1

Isso significa que, às vezes, os números rs ficam sozinhos na coluna, às vezes eles são seguidos por :---------- e, às vezes, começam com exm- .

Eu quero ser capaz de extrair todos os números rs listados no arquivo txt 1 do arquivo txt 2. Alguma sugestão de como eu posso fazer isso?

    
por Gunn-Helen Moen 12.09.2017 / 06:38

2 respostas

2

Você pode usar o comando da seguinte forma.

grep -Fwe "$(awk '{print $1}' file1)" file2 >output.txt

Isso está recebendo a primeira coluna do arquivo1 e o feed para grep como conjunto de PATTERNs search in file2.

Não há dados correspondentes em seus dados de amostra, mas isso funciona.

    
por 12.09.2017 / 07:11
0

use o operador join . Assumindo que os separadores são um espaço.

join -t ' ' -1 1 -2 1 \
           <(sort -t ' ' -k1,1 file1.txt) \
           <(tr ":" " " < file2.txt | cut -d ' ' -f 2 | sort -t ' ' -k1,1 ) 

PS: para questões de bioinformática, você deve usar o link

    
por 12.09.2017 / 11:01