Seu problema é que você está levando o shell para o que não é: uma linguagem de programação. Um shell é antes de tudo um interpretador de linha de comando. Scripts shell são scripts. Você está implementando a lógica, o algoritmo do seu problema na sintaxe do shell, então você está indo pelo caminho errado.
Existem problemas óbvios no seu código, como variáveis não citadas. Mas apesar de tudo, é feio executar muitos comandos (como um shell é uma ferramenta para executar comandos, não linguagens de programação) apenas para encontrar a proporção de caracteres diferentes de A e T em um arquivo.
Além disso, o awk usa números flutuantes de 64 bits internamente. Você tem certeza que precisa de mais precisão do que isso? Se esses números são para ser usados por algo que tem mais precisão do que isso, você não pode usar esse alguma coisa para fazer a coisa toda?
Para responder à sua pergunta, você faria:
$ echo 1 3 | awk -vRS= '{("echo scale=300\;" $1 "/" $2 "|bc -l") | getline; print}'
.3333333333333333333333333333333333333333333333333333333333333333333\
33333333333333333333333333333333333333333333333333333333333333333333\
33333333333333333333333333333333333333333333333333333333333333333333\
33333333333333333333333333333333333333333333333333333333333333333333\
33333333333333333333333333333
Mas você pode facilmente ver como isso é inútil: awk executando um shell e dois comandos para cada linha de entrada, lendo sua saída e imprimindo novamente ... Até mesmo o shell externo poderia ter feito um trabalho tão bom com menos problemas .
Um pouco menos bobo para abordá-lo, se você ainda quiser usar o awk, seria:
echo 1 3 | awk 'BEGIN{print "scale=300"}{print $1"/"$2}' | bc
Dessa vez, apenas um comando awk
e um bc
.
É bastante óbvio para mim que você precisa de uma linguagem de programação real aqui (perl, ruby, python vem à mente). Você pode chamar o interpretador para essa linguagem de programação a partir de um script de shell, mas por favor apenas uma vez: apenas uma invocação deve ser suficiente para fazer a coisa toda.