Compare vários arquivos com o arquivo ref e imprima se corresponder

3

Eu tenho vários arquivos que se parecem com isso:

b
alternate_ids rsid chromosome position alleleA alleleB index average_maximum_posterior_call info cohort_1_AA cohort_1_AB cohort_1_BB cohort_1_NULL all_AA all_AB all_BB all_NULL all_total all_maf missing_data_proportion frequentist_add_pvalue frequentist_add_info frequentist_add_beta_1 frequentist_add_se_1 comment
--- rs148087467 NA 60523 T G 1 0.999401 0.266624 7261.6 5.39417 0.00299072 0 7261.6 5.39417 0.00299072 0 7267 0.000371553 0 0.584342 0.247422 -0.473097 0.86481 NA
--- rs187110906 NA 60969 C A 2 0.995453 0.23508 7228.62 38.2204 0.138092 0.0169067 7228.62 38.2204 0.138092 0.0169067 7267 0.00264873 1.16325e-06 0.803757 0.281439 0.0754077 0

que preciso corresponder a outro arquivo:

a
rs586178
rs79598313
rs72634501
rs191448950
rs9988450
rs11207995

Caso alternate_ids e a correspondam, imprima uma linha correspondente em um novo arquivo.

Eu ouvi falar sobre

$ awk -F'|' 'NR==FNR{c[$1$2]++;next};c[$1$2] > 0' file2 file1

mas compara apenas 2 arquivos. Devo fazer um loop para percorrer todos os arquivos?

    
por HoHoHo 10.05.2016 / 15:05

2 respostas

1

Isso deve analisar o arquivo a e, se uma das linhas estiver no arquivo b , exibirá a linha:

for i in $(<a); do grep $i b; done

Se você tiver um arquivo do tipo a que contém as chaves e vários do tipo b , basta substituir b por um loop variável nos nomes de arquivos.

    
por 10.05.2016 / 15:21
0

Se eu estou interpretando sua pergunta corretamente, isso deve fazer o que você quer:

grep --no-filename --fixed-strings --file a b1 b2 b3 ... bN

ou, com opções curtas:

grep -h -F -f a b1 b2 b3 ... bN

Desabilita strings fixas do arquivo a nos arquivos b1 , b2 , b3 etc. A opção -h ou --no-filename suprime a saída do nome de arquivo de cada arquivo correspondente.

    
por 11.05.2016 / 01:59