É minha strong suspeita de que você não deveria estar executando um script para atualizar seu script. Em vez disso, você deve apenas chamar awk
de seu script original e obter os dados necessários dessa maneira. Então saker.txt
poderia simplesmente ser usado como um arquivo de configuração (o que é) para mudar o comportamento do seu script (ao invés de usá-lo para mudar a saída do script de criação de script).
Eu tenho dados muito limitados em seu script, obviamente, mas o que parece é que você está usando saker.txt
como uma tabela de pesquisa para definir uma variável em seu script.
Especificamente, o snippet de script:
if [ "$STATUS" == "1923.12.312." ]
then
vem="Nikl"
fi
if [ "$STATUS" == "12391.123.123" ]
then
vem="Jo"
fi
if [ "$STATUS" == "12398123.123912" ]
then
vem="Ad"
fi
pode ser funcionalmente reproduzido com um script awk embutido como segue:
vem=$( awk -v status="$STATUS" '$1 == status { printf "%s", $2 ; exit }' saker.txt )
Isso responde "Como posso definir uma variável em bash
com base em procurar o valor de outra variável em um arquivo?" que é o que parece que você está tentando realizar executando seu script para atualizar seu script.
Há advertências, é claro, como "E se o valor de $STATUS
não estiver listado em saker.txt
?" "E se for listado duas vezes?" "Como posso definir um valor padrão para vem
?" Mas você ainda tem todas essas advertências, e mais, com um script de atualização de script.
EDIT: Se você quiser permitir espaços no valor de vem
como determinado no arquivo saker.txt
, é melhor usar outra coisa para um delimitador, como uma guia:
$ cat saker.txt
1923.12.312. Nikl
12391.123.123 Jo
12398123.123912 Ad
Em seguida, use a seguinte versão do awk
one-liner:
vem=$( awk -Ft -v status="$STATUS" '$1 == status { printf "%s", $2 ; exit }' saker.txt )
Uma advertência sobre os delimitadores de tabulação: certifique-se de não usar a guia mais de um . Diferentemente do tratamento "delimitado por espaço em branco" de awk
, quando você define explicitamente o delimitador como uma TAB apenas, a guia each é contada como um delimitador, independentemente de haver texto entre as guias. Portanto, 10000<tab><tab>John
será considerado como TRÊS campos: "10000", "" (campo vazio) e "John".