executa o mesmo script para vários arquivos, os scripts requerem 2 arquivos de entrada

0

Eu tenho uma pasta contendo 500 arquivos genotype, assim:

xaa.txt
xab.txt
xac.txt
xad.txt

Eu quero executar um script para cada arquivo de genótipo separadamente no mesmo arquivo; Eu sei que esta pergunta foi respondida antes, MAS, meu script requer "2" formato de arquivo de entrada (o primeiro arquivo é meus arquivos genotype que são 500 arquivos, segundo arquivo é um único arquivo de população individual. Meu script também requer arquivos de saída para cada genótipo.file.

para um único arquivo genotípico que eu estava usando facilmente

perl ./my_script.pl  my_geno_file.tab.table  good_individuals.txt  results.out.tab.table

onde my_geno_file.tab.table é o primeiro arquivo (eu tenho agora 500 geno_files), good_individuals.txt é o segundo arquivo de entrada e results.out.tab.table é o terceiro arquivo de entrada que deve estar vazio. você poderia por favor me ajudar como posso executar este script ao mesmo tempo para todos os 500 arquivos?

    
por Anna1364 18.07.2017 / 19:49

1 resposta

1

Você pode ir para xargs . Primeiro, alimente-o com os arquivos através de um pipe no stdin e, em seguida, use os argumentos com um executável, enquanto mantém o controle do paralelismo, definindo o número máximo de processos a serem usados.

printf "%s
printf "%s%pre%" _the_right_dir_/* | xargs -0 -I@ -P500 ./my_script.pl @ file_2 @file_3
" _the_right_dir_/* | xargs -0 -I@ -P500 ./my_script.pl @ file_2 @file_3

-0 informa xargs que a entrada é separada por NUL.

-I@ define o símbolo de substituição. No efeito, o segundo @ no lado direito do pipe ( | ) é substituído por um nome de arquivo. Então aparece mais uma vez em @file_3 para demonstrar que você pode usar @ mais uma vez no mesmo comando. Aqui para produzir o nome do arquivo de saída.

-P500 significa no máximo 500 processos para serem executados ao mesmo tempo.

Por fim, printf "%sxargs" _the_right_dir_/* lista os arquivos de diretório que os separam dos NULs. Então ./my_script.pl os toma um por um e os usa como argumentos para %code% .

    
por 18.07.2017 / 20:19