passando vários argumentos através de um pipe

passando vários argumentos através de um pipe

Eu tenho um comando que gera linhas infinitas neste formato:

$cmd1
word1 text with spaces and so on
word2 another text with spaces and so on

Quero passar cada linha para outro comando para que a primeira wordseja passada para um argumento e o restante do texto seja passado para outro argumento. igual a:

$cmd2 --argword=word1 --argtext="text with spaces and so on"
$cmd2 --argword=word2 --argtext="another text with spaces and so on"

Responder1

Supondo que a linha final tenha uma nova linha (caso contrário, essa linha será perdida) e que cmd2esteja definida como algo sensato, um calço de código shell pode parecer algo como

#!/bin/sh
IFS=" "
while read word andtherest; do
    $cmd2 --argword="$word" --argtext="$andtherest"
done

já que os campos restantes devem ser agrupados andtherestde acordo com o readcomportamento.

Responder2

Tente um pouco estranho:

/usr/bin/awk -f
{
    cmd=$1;
    gsub($1 " +", "")
    printf("%s --argword=%s --argtext=\"%s\"\n", cmd2, cmd, $0)
}

Essa saída aceita uma variável awk como nome paracmd2.

Você pode testar desta forma:

$ echo "word1 text with spaces and so on" | 
  awk -v cmd2=foo '{ cmd=$1; gsub($1 " +", ""); printf("%s --argword=%s --argtext=\"%s\"\n", cmd2, cmd, $0) }'
foo --argword=word1 --argtext="text with spaces and so on"

informação relacionada