여러 줄이 있는 파일이 있고 각 줄에는 탭 구분 기호와 병렬로 전달하려는 매개 변수가 있습니다.
이 스크립트를 실행합니다.
cat $hdd_file | grep $ssd | parallel -C '\t' clean_and_destroy
작동합니다. $hdd_file은 파일 이름이고, grep은 특정 $ssd가 캐시된 라인으로 있는 hdd를 수집한 다음 병렬로 함수를 호출하여 연결을 파괴합니다.
이제 정리된 SSD에 새 파티션이 있으므로 다음과 같이 병렬을 호출하려고 합니다.
cat $hdd_file | grep $ssd | parallel -C '\t' create_new_cache :::+ `seq $partitions_per_ssd`
파이프에서 매개변수를 가져와서 주어진 숫자와 쌍을 이루어야 하지만 그렇지 않습니다.
cat $hdd_file | grep $ssd | parallel -C '\t' create_new_cache ::: {} :::+ `seq $partitions_per_ssd`
나는 또한 이것을 시도했지만 여전히 작동하지 않습니다. 어떤 이유로든 {}:::+가 인수로 전달됩니다.
답변1
암소 비슷한 일종의 영양parallel
해결책:
예 input.txt
(데모용):
a b
c d
e f
grep '^[ac]' input.txt
입력 소스 파일과 마찬가지로 명령(또는 파이프)을 시뮬레이션하는 데 사용됩니다.
parallel -C '\t' echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 3)
산출:
a b 1
a b 2
a b 3
c d 1
c d 2
c d 3
:::: argfiles
-argfiles
입력 소스로 처리됩니다.:::
그리고::::
혼합될 수 있습니다.
각 입력 소스의 요소를 집계하려면 --xapply
옵션을 추가하세요.
parallel -C '\t' --xapply echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 2)
산출:
a b 1
c d 2