Логика верная, но вы допустили пару ошибок:
awk -vOFS=, -F, '{
for(i = 1; i <=NF; i++ ){
$i -= 1;
}
print;
}' file.txt
getline
(в том виде, в котором вы ее использовали) считывает следующая строка в $ 0
- здесь нет смысла.
Вам нужно указать awk на разделение ( FS
или с помощью -F
) через запятую, по умолчанию он будет разделен на пробелы
$ 0
- это целое строка, поэтому вы хотите начать свой цикл с i = 1
Если вы хотите печатать запятые на выходе, вам необходимо установить OFS =,
(разделитель выходных полей).
В качестве альтернативы вы можете использовать perl:
perl -ple 's{(\d+)}{$1 - 1}eg;' file.txt