Eu tenho o seguinte script para filtrar uma tabela ascii se um dos campos for igual à entrada do usuário:
ascii () {
arg1=$1
cmd=$(man ascii | awk '/000/,/077/ {print}' | sed '/^$/d')
if [ #$ -eq 0 ]
then
echo "${cmd}"
else
newcmd=$(echo "${cmd}" | awk '{for(i=1;i<NF;i++) if ($i=="${arg1}") {print $0}}')
echo "${newcmd}"
fi
}
nem é preciso dizer que não está funcionando, mas estou recebendo o seguinte erro:
bash: [: missing `]'
e as cores mostradas dentro da string awk são todas roxas na minha instância do shell, então estou assumindo que "${arg1}" não está sendo interpretado corretamente
(usei um var para o primeiro argumento inserido pelo usuário porque o awk também usa a sintaxe do cifrão e não sabia de que outra forma distinguir funções args versus campos awk)
Acho que pode ser isso que você está tentando fazer, mas sem entrada de amostra, nem saída esperada, nem uma ideia de quais valores podem ser passados para a função como argumentos, é um palpite não testado:
Consulte how-do-i-use-shell-variables-in-an-awk-script para obter mais informações sobre como usar o valor das variáveis shell no script awk.
man ascii
no meu sistema gera "Nenhuma entrada manual para ascii", então não sei qual formato esse comando gera no seu sistema, mas se a entrada para o script awk tiver espaços que não sejam espaços em branco (por exemplo, guias) nas seções de seu interesse então faça isso ou algo semelhante para converter todos os espaços em espaços em branco apenas para comparação com a string de destino:Isso poderia ser escrito com um pouco mais de eficiência, executando apenas
tgt
ações relacionadas quandof
eNF
estiverem definidos, por exemplo:mas não vale a pena se preocupar com a eficiência em vez da concisão para inserir o tamanho de uma página de manual.