gnu argumento de par paralelo com argumentos de entrada de arquivo

2

Eu tenho um arquivo com muitas linhas, e em cada linha eu tenho os argumentos que quero passar paralelamente a um separador de guias.

Eu corro este script

cat $hdd_file | grep $ssd | parallel -C '\t' clean_and_destroy

E funciona, $ hdd_file é o nome do arquivo, o grep coleta as linhas que o hdds tem um certo $ ssd como cache, e então o paralelo chama uma função que destrói sua conexão.

Agora que fiz novas partições para os ssds limpos, tento chamar paralelos assim:

cat $hdd_file | grep $ssd | parallel -C '\t' create_new_cache :::+ 'seq $partitions_per_ssd'

O qual deve obter os argumentos do pipe e associá-los aos números fornecidos, mas isso não acontece.

cat $hdd_file | grep $ssd | parallel -C '\t' create_new_cache ::: {} :::+ 'seq $partitions_per_ssd'

Eu também tentei isso e ainda não funciona. Os {} ::: + são passados como argumentos por algum motivo

    
por Θεόφιλος Μουρατίδης 13.03.2018 / 14:52

1 resposta

2
Solução

GNU parallel :

Amostra input.txt (para demonstração):

a   b
c   d
e   f

grep '^[ac]' input.txt será usado para emular o comando (ou pipeline) agindo como arquivo de origem de entrada

parallel -C '\t' echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 3)

A saída:

a b 1
a b 2
a b 3
c d 1
c d 2
c d 3
  • :::: argfiles - trata argfiles como fonte de entrada. ::: e :::: podem ser misturados.

Para agregar elementos de cada fonte de entrada - adicione --xapply option:

parallel -C '\t' --xapply echo :::: <(grep '^[ac]' input.txt) ::: $(seq 1 2)

A saída:

a b 1
c d 2
    
por 13.03.2018 / 15:14