У меня есть текстовый файл со значениями
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? Я хотел бы заменить второй столбец на основе того, ЕСЛИ условие, можно помочь мне найти свою ошибку?
Путем включения "300"
в кавычках Вы вызвали лексическое (а не числовой) сравнение. Для сравнения численно опускают кавычки:
awk '{ if ($2 > 300) ($2 = 300); print $0}'
или более идиоматически
awk '$2 > 300 {$2 = 300} 1'