Mám soubor s mnoha řádky a na každém řádku mám argumenty, které chci předat paralelně s oddělovačem tabulátoru.
Spustím tento skript
cat $hdd_file | grep $ssd | parallel -C 't' clean_and_destroy
A funguje to, $hdd_file je název souboru, grep shromažďuje řádky, které mají hdd určitou hodnotu $ssd jako mezipaměť, a pak paralelka zavolá funkci, která zničí jejich spojení.
Nyní, když jsem vytvořil nové oddíly na vyčištěné ssd, zkouším volat paralelně takto:
cat $hdd_file | grep $ssd | parallel -C 't' create_new_cache :::+ `seq $partitions_per_ssd`
Což by mělo získat argumenty z roury a spárovat je s danými čísly, ale ne.
cat $hdd_file | grep $ssd | parallel -C 't' create_new_cache ::: {} :::+ `seq $partitions_per_ssd`
Toto jsem také zkoušel a stále to nefunguje. {} :::+ jsou z nějakého důvodu předávány jako argumenty
Přijatá odpověď:
parallel
GNU řešení:
Ukázka input.txt
(pro ukázku):
a b
c d
e f
grep '^[ac]' input.txt
bude použit k emulaci příkazu (nebo potrubí) fungujícího jako vstupní zdrojový soubor
parallel -C 't' echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 3)
Výstup:
a b 1
a b 2
a b 3
c d 1
c d 2
c d 3
:::: argfiles
– ošetřitargfiles
jako vstupní zdroj.:::
a::::
lze míchat.
Chcete-li agregovat prvky z každého vstupního zdroje, přidejte --xapply
možnost:
parallel -C 't' --xapply echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 2)
Výstup:
a b 1
c d 2