Код awk для умножения заданного столбца на номер в файле, разделенном пробелами

У меня есть файл, разделенный пробелами. Я хочу выполнить математическую операцию с данным столбцом. например Я хочу умножить столбец 2 на 1e6. Я могу использовать следующую команду:

awk 'BEGIN { FS=","; OFS=","; } {print $1,$2=$2*1e6,$3,$4}' result.txt

Моя проблема в том, что мой файл может содержать любое количество столбцов. В этом случае какой должна быть моя команда awk ? Допустим, в моем файле 25 столбцов, и я хочу умножить 15-й столбец на 100. Как это сделать в awk ?

0
17.08.2016, 17:59
2 ответа

Вам не нужно знать количество столбцов, вы можете просто обновить тот, который вам нужен, и awk соберет их:

awk '{ $15 *= 100 } 1' file.csv

Но вы также можете использовать NF , если вам нужно, скажите так:

awk '{ $15 *= 100; for(i=1; i<=NF; i++) printf(" %d", $i); print "\n" }' file.csv
1
28.01.2020, 02:34

Вместо того, чтобы печатать все поля, вы можете напечатать всю строку с $ 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}'
1
28.01.2020, 02:34

Теги

Похожие вопросы