분석 프로그램과 데이터가 포함된 텍스트 파일이 있습니다. 설명의 편의를 위해 각각 wibble
및 를 호출하겠습니다 data.txt
.
for
모든 데이터를 처리하기 위해 간단한 루프를 시도했습니다 .
나는 $(cat data.txt)에서 수행합니다. 스윙 $i 완벽한
하지만 하나씩 분석하는 데는 오랜 시간이 걸립니다.
그래서 각 데이터에 대해 별도의 작업을 분할해 보았습니다.
나는 $(cat data.txt)에서 수행합니다. (스윙 $i ) & 완벽한
그러나 너무 많은 분석 프로세스를 실행하면 메모리 손상이 발생할 수 있습니다!
그래서 저는 5명씩 그룹별로 분석 과정을 시작하고 싶었습니다. 처음 5개 데이터 항목을 선택하고 해당 데이터 항목에 대한 분석 프로세스를 시작한 다음 다음 5개 항목을 선택하여 동일한 작업을 수행합니다.
이전 게시물(아래)에 설명된 절차적 "병렬성"을 사용하지 않고 어떻게 이를 수행할 수 있습니까? 기관 워크스테이션에 이 애플리케이션을 설치할 수 있는 sudo 권한이 없으므로 이를 달성하기 위해 더 간단한 코드를 사용하려고 합니다.
https://unix.stackexchange.com/questions/299346/running-commands-at-once
https://unix.stackexchange.com/questions/361505/how-to-control-for-loop
답변1
GNU 사용 xargs
:
xargs -rn 1 -P 5 -a file wibble
이는 arrall에서 최대 5개의 명령을 실행하며 wibble
, 각 명령은 as 인수에서 1단어를 가져옵니다.P
file
GNU의 경우 xargs
단어는 일련의 공백, 탭 또는 개행 문자로 구분되며 작은 따옴표, 큰 따옴표 및 백슬래시는 이러한 구분 기호 및 서로에 대한 인용 연산자로 인식됩니다.
~을 위한성격파일의 각 줄에 하나씩 추가합니다 -d '\n'
.
~을 위한성격bash
기본적으로 (수정되지 않는 한) 공백, 탭 및 줄 바꿈으로 구분되고 파일 이름 생성의 영향을 받는 on의 메소드와 같이 처리하려면 $IFS
다음을 수행할 수 있습니다.
xargs -rn 1 -P 5 -0a <(printf '%s\0' $(<file)) wibble
즉, 쉘이 분할+glob을 실행하고 printf
결과 단어를 에 전달하도록 합니다 xargs
.