다음과 같은 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
-0
xargs
입력이 NUL로 구분되어 있음 을 나타냅니다 .
-I@
대체 기호를 정의합니다. 실제로, @
파이프() 오른쪽의 두 번째 항목은 |
파일 이름으로 대체됩니다. 그런 다음 동일한 명령에서 다시 사용할 @file_3
수 있음을 나타내기 위해 다시 나타납니다 . @
그러면 출력 파일 이름이 생성됩니다.
-P500
동시에 실행되는 최대 500개의 프로세스를 나타냅니다.
마지막으로 printf "%s\0" _the_right_dir_/*
NUL로 구분된 디렉터리 파일을 나열합니다. 그런 다음 xargs
하나씩 꺼내어 매개변수로 사용합니다 ./my_script.pl
.