Чтобы сохранить форматирование с помощью awk
при добавлении значений в 4-е поле, вы можете вычислить новое значение 4-го поля и затем использовать sub
, чтобы изменить значение, не вызывая awk
для пересчета поля и удаление пробела.
Например, если ваш файл хранится как text
и добавляется значение 180
в 4-е поле (кроме случаев, когда 0
), вы можете сделать:
awk -v n=180 '$4!=0 {newval=$4+n; sub(/[0-9]+$/,newval)}1' text
В результате получится следующий вывод:
$ awk -v n=180 '$4!=0 {newval=$4+n; sub(/[0-9]+$/,newval)}1' text
1 A 18 0
2 B 19 0
3 C 20 30
50 D 21 80
128 E 22 50
10 F 23 -0
10 G 23 -0
При вызове с использованием сценария оболочки вы можете передать свой параметр $1
как:
awk -v n="$1" '$4!=0 {newval=$4+n; sub(/[0-9]+$/,newval)}1' text
Хотя Я бы посоветовал проверить, что в сценарий был передан аргумент:
[ -z "$1" ] && {
echo "error: value require as argument"
exit 1
}
или вы можете указать значение по умолчанию - до вас.