У меня есть файл, разделенный пробелами. Я хочу выполнить математическую операцию с данным столбцом. например Я хочу умножить столбец 2 на 1e6. Я могу использовать следующую команду:
awk 'BEGIN { FS=","; OFS=","; } {print $1,$2=$2*1e6,$3,$4}' result.txt
Моя проблема в том, что мой файл может содержать любое количество столбцов. В этом случае какой должна быть моя команда awk
? Допустим, в моем файле 25 столбцов, и я хочу умножить 15-й столбец на 100. Как это сделать в awk
?
Вам не нужно знать количество столбцов, вы можете просто обновить тот, который вам нужен, и awk
соберет их:
awk '{ $15 *= 100 } 1' file.csv
Но вы также можете использовать NF
, если вам нужно, скажите так:
awk '{ $15 *= 100; for(i=1; i<=NF; i++) printf(" %d", $i); print "\n" }' file.csv
Вместо того, чтобы печатать все поля, вы можете напечатать всю строку с $ 0
.
Это может сработать, потому что мы можем изменить поля, назначив им данные
например,
$2=$2*100
обновит второе поле и оставит остальные нетронутыми:
% echo '1 2 3 4' | awk '{$2=$2*100; print $0}'
1 200 3 4
Мы можем уменьшить это поле, сделав использование значений по умолчанию; например, print
сам по себе напечатает $ 0
awk '{$2=$2*100; print}'
Мы даже можем использовать действия по умолчанию:
awk '{$2=$2*100} 1'
Но в целом я рекомендую более длинную версию, потому что другим людям легче читать и понимать ; Удобство сопровождения кода так же важно, как и краткость:
awk '{$2=$2*100; print $0}'