xargs dividir linha de entrada

2

Eu tenho um arquivo com duas colunas separadas por espaços como este:

potato 5
apple 7
pretzel 9

Eu quero emitir um comando em cada linha assim:

cmd -f potato -n 5
cmd -f apple -n 7
cmd -f pretzel -n 9

Posso obter xargs para dividir a linha de entrada e passar esses argumentos para um comando? xargs é o mesmo que usar aqui?

    
por wonk wonk 16.03.2012 / 00:16

2 respostas

2

Eu não acho que você possa fazer isso diretamente com xargs, mas há outra solução:

$ cat /tmp/l
potato 5
apple 7
pretzel 9

usando printf:

$ printf 'cmd -f %s -n %s\n' $(</tmp/l)
cmd -f potato -n 5
cmd -f apple -n 7
cmd -f pretzel -n 9

se você precisar executá-lo, você pode usar outro pipe no shell, como

$ printf 'cmd -f %s -n %s\n' $(</tmp/l) | bash

Outra simples & solução awk pura:

$ awk '{print "cmd -f "$1" -n "$2}' /tmp/l
cmd -f potato -n 5
cmd -f apple -n 7
cmd -f pretzel -n 9

Finalmente:

$ awk '{system("cmd -f "$1" -n "$2)}' /tmp/l
    
por 16.03.2012 / 02:24
2

Se você tem o link do GNU Paralelo instalado, você pode fazer isso:

cat food.txt | parallel --colsep ' ' cmd -f {1} -n {2}

Ele também executará um cmd por núcleo cpu em paralelo.

Você pode instalar o GNU Parallel simplesmente por:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Assista aos vídeos de introdução do GNU Parallel para saber mais: link

    
por 16.03.2012 / 23:54

Tags