A lógica está certa, mas você cometeu alguns erros:
awk -vOFS=, -F, '{
for(i = 1; i <=NF; i++ ){
$i -= 1;
}
print;
}' file.txt
-
getline(como você usou) lê a próxima linha em$0- não faz sentido aqui. -
Você precisa dizer ao awk para dividir (
FSou usando-F) em uma vírgula, por padrão ele será dividido em espaço em branco -
$0é a linha inteira, portanto, você deseja iniciar o loop emi = 1 -
Se você quiser imprimir vírgulas na saída, precisará definir
OFS=,(separador de campo de saída).
Como alternativa, você pode usar o perl:
perl -ple 's{(\d+)}{$1 - 1}eg;' file.txt