awk для замены полевого использования, ЕСЛИ условие

У меня есть текстовый файл со значениями

record2 300 IN CNAME Value2
record3 30 IN CNAME Value3
record4 86400 IN CNAME Value4
record5 86400 IN CNAME Value5
record6 900 IN CNAME Value6
record7 1600 IN CNAME Value7
record8 1800 IN CNAME Value8

awk '{ if ($2 > "300") ($2 = 300); print $0}' /tmp/file дает мне вывод

record2 300 IN CNAME Value2
record3 30 IN CNAME Value3
record4 300 IN CNAME Value4
record5 300 IN CNAME Value5
record6 300 IN CNAME Value6
record7 1600 IN CNAME Value7
record8 1800 IN CNAME Value8

Почему это не заменяет 1 800 и 1 600 полей даже при том, что они> 300? Я хотел бы заменить второй столбец на основе того, ЕСЛИ условие, можно помочь мне найти свою ошибку?

1
задан 1 August 2019 в 06:00

1 ответ

Путем включения "300" в кавычках Вы вызвали лексическое (а не числовой) сравнение. Для сравнения численно опускают кавычки:

awk '{ if ($2 > 300) ($2 = 300); print $0}'

или более идиоматически

awk '$2 > 300 {$2 = 300} 1'
2
ответ дан 7 December 2019 в 13:15

Другие вопросы по тегам:

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