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 (
FS
ou 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