파일 및 경로 이름(텍스트 파일) 목록을 xargs로 보냅니다.

파일 및 경로 이름(텍스트 파일) 목록을 xargs로 보냅니다.

다양한 파일의 경로가 포함된 파일이 있습니다.

파일.txt:

/path/to/file1.txt
/path/to/file2.txt
...
/path/to/fileN.txt

파일을 처리하기 위해 스크립트에서 이를 사용하고 싶습니다.

cat files.txt | xargs -P 12 -L 1 -I % /software/Linux/itt/idl/idl81/bin/idl -e program -args %

기본적으로 xargs를 인수로 통해 이 경로를 이 IDL 프로그램에 문자열로 보내고 싶습니다.

그러나 cat을 사용하면 실제로 file1.txt, file2.txt를 캐싱하고 해당 내용을 이 IDL 프로그램의 매개변수로 직접 출력합니다.

이 files.txt의 각 줄을 이 IDL 스크립트에 문자열로 보내려면 어떻게 해야 합니까?

답변1

다음과 같은 루프가 포함된 작은 스크립트를 사용할 수 있습니다.

순리에 맡기다IDL.sh 실행

#!/bin/ksh
while (read filepath)
do    
    /software/Linux/itt/idl/idl81/bin/idl -e program -args "$filepath"
done < "$1"

간단하고 우아하며 매력적으로 작동해야 합니다. 빨리 달려./runIDL 파일.txt그게 다야!

답변2

GNU Parallel이 귀하에게 적합할 수 있습니다:

cat files.txt | parallel /software/Linux/itt/idl/idl81/bin/idl -e program -args {}

기본적으로 CPU 코어당 1개의 프로세스가 있으며 두 병렬 작업의 출력이 혼합되지 않도록 합니다.

GNU Parallel은 동일한 컴퓨터 또는 SSH를 통해 액세스할 수 있는 여러 컴퓨터에서 작업을 병렬로 쉽게 실행할 수 있게 해주는 범용 병렬 처리기입니다. 종종 for루프를 대체할 수 있습니다.

4개의 CPU에서 32개의 서로 다른 작업을 실행하려는 경우 병렬화하는 간단한 방법은 각 CPU에서 8개의 작업을 실행하는 것입니다.

간단한 스케줄링

대신, GNU Parallel은 작업이 완료되면 새로운 프로세스를 생성하여 CPU를 활성 상태로 유지하여 시간을 절약합니다.

GNU 병렬 스케줄링

설치하다

배포판에 GNU Parallel이 패키지되어 있지 않으면 루트 액세스 없이 개인 설치를 수행할 수 있습니다. 이 작업은 10초 안에 완료할 수 있습니다.

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

다른 설치 옵션은 다음을 참조하세요.http://git.savannah.gnu.org/cgit/parallel.git/tree/README

더 알아보기

더 많은 예시 보기:http://www.gnu.org/software/parallel/man.html

소개 비디오 보기:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

이 튜토리얼을 살펴보세요:http://www.gnu.org/software/parallel/parallel_tutorial.html

지원을 받으려면 이메일 목록에 가입하세요.https://lists.gnu.org/mailman/listinfo/parallel

관련 정보