Pessoalmente, sim, eu faria tudo em perl. : -)
TK=(325,350,231,655)
Opa. cuidado. Você criou um único array de elementos com uma string separada por vírgula como o elemento.
echo -| awk -v tk="${TK[*]}" '{split(tk,tka,/ /)} { for (i=0; i<=NF; i++) { printf "%.1f\n", tka[i]-273.15 } } '
awk
matrizes começam em 1, não em zero.
Como você atribui a variável, você não está realmente usando os dados STDIN para algo diferente do valor NF (mas você passou em apenas um único elemento). Em vez de usar NF, vamos apenas contar o resultado de split
explicitamente. Talvez algo assim:
$ TK=(325 350 231 655)
$ echo - | awk -v tk="${TK[*]}" '{fields=split(tk,tka,/ /)} { for (i=1; i<=fields; i++) { printf "%.1f\n", tka[i]-273.15 } } '
51.9
76.9
-42.1
381.9
Como menciona dave_thompson_085, você está fazendo um trabalho extra atribuindo os dados a uma variável diretamente, em vez de apenas enviá-la via STDIN. Mais comum provavelmente seria algo como:
$ echo ${TK[*]} | awk '{for (i=1; i<=NF; i++) { printf "%.1f\n", $i-273.15 } } '
51.9
76.9
-42.1
381.9
E se você quisesse começar com uma perl
solution:
$ echo ${TK[*]} | perl -lane 'for $item (@F) {print $item-273.15}'
51.85
76.85
-42.15
381.85