여러 파일에 대해 동일한 스크립트를 실행합니다. 스크립트에는 2개의 입력 파일이 필요합니다.

여러 파일에 대해 동일한 스크립트를 실행합니다. 스크립트에는 2개의 입력 파일이 필요합니다.

다음과 같은 500개의 유전자형 파일이 있는 폴더가 있습니다.

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

동일한 파일에서 각 유전자형 파일에 대한 스크립트를 별도로 실행하고 싶습니다. 이 질문에 대한 답변은 이전에 이미 답변된 것으로 알고 있습니다. 그러나 내 스크립트에는 "2" 입력 파일 형식이 필요합니다. 첫 번째 파일은 내 유전자형 파일이고 500개의 파일이 있습니다. 두 번째 파일은 단일 개별 모집단 파일입니다. 또한 내 스크립트는 각 유전자형에 대한 파일을 출력해야 합니다.

단일 유전자형 파일의 경우 쉽게 사용합니다.

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

my_geno_file.tab.table이 첫 번째 파일인 경우(현재 500개의 geno_file이 있음) good_individuals.txt는 두 번째 입력 파일이고 results.out.tab.table은 세 번째 입력 파일입니다. 비어 있어야 합니다. 도와주실 수 있나요? 500개 파일 모두에 대해 이 스크립트를 동시에 실행하는 방법은 무엇입니까?

답변1

당신은 갈 수 있습니다 xargs. 먼저 표준 입력의 파이프를 통해 파일을 공급한 다음 사용할 최대 프로세스 수를 설정하여 병렬성을 제어하면서 실행 파일에 인수를 사용합니다.

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

-0xargs입력이 NUL로 구분되어 있음 을 나타냅니다 .

-I@대체 기호를 정의합니다. 실제로, @파이프() 오른쪽의 두 번째 항목은 |파일 이름으로 대체됩니다. 그런 다음 동일한 명령에서 다시 사용할 @file_3수 있음을 나타내기 위해 다시 나타납니다 . @그러면 출력 파일 이름이 생성됩니다.

-P500동시에 실행되는 최대 500개의 프로세스를 나타냅니다.

마지막으로 printf "%s\0" _the_right_dir_/*NUL로 구분된 디렉터리 파일을 나열합니다. 그런 다음 xargs하나씩 꺼내어 매개변수로 사용합니다 ./my_script.pl.

관련 정보