Depende de quão complicada é a saída e de quanto a formatação precisa ser mantida (por exemplo, a primeira coluna tem sempre oito caracteres? etc.). No entanto, um loop while
pode funcionar
cat source.tab | while read -r name id
do
echo "$name $id $(dbstream .... code=$id)"
done
Você pode alterar o que acontece dentro do loop para formatar o que quiser eg
cat source.tab | while read -r name id
do
res=$(dbstream ... code=$id)
printf "%10s %5d %s" $name $id $res
done
Como comentário, você só quer chamar dbstream
uma vez. Isso requer dbstream
para manter a saída na mesma ordem de entrada.
Aqui está um exemplo simples de dbstream
program:
#!/bin/sh
for a in "$@"
do
echo dbstream $$ sees $a
done
Incluímos o PID na saída para que possamos mostrar que ele é chamado apenas uma vez.
Agora podemos usar paste
e substituir processo:
$ paste source.tab <(./dbstream $(awk '{print $2}' source.tab ))
alice 1 dbstream 20671 sees 1
bob 2 dbstream 20671 sees 2
Agora, se o source.tab
for um processo lento, recomendo usar um arquivo temporário
por exemplo
#!/bin/bash
tmp='mktemp'
trap '/bin/rm -f $tmp ; exit' 0 1 2 3 15
cat source.tab > $tmp
paste $tmp <(./dbstream $(awk '{print $2}' $tmp ))