Вы, кажется, ошиблись в кавычках. Вам нужно сделать как ниже
awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv
Это объясняется на man-странице GNU awk - 3.2 Escape-последовательности
Некоторые символы не могут быть включены буквально в строковые константы ("foo")
или константы регулярного выражения ( /foo/
). Вместо этого они должны быть представлены escape-последовательностями, которые являются символьными последовательностями, начинающимися с обратной косой черты ( \
). Одним из вариантов использования escape-последовательности является включение символа двойной кавычки в строковую константу. Поскольку простая двойная кавычка оканчивает строку, вы должны использовать ее \"
для представления действительного символа двойной кавычки как части строки.
Что касается причины, по которой я мог понять причину такого поведения, то, awk
похоже, интерпретировал его 2.4.0
как числовое слово с дополнительными кавычками из вашего ОП и решает потерять точность после первой точки.
т.е.
$2="\""2.4.0"\""
становится просто
$2=""2.4.0""
который awk
больше не понимает как строка. Вы можете воспроизвести это поведение, просто выполнив
awk 'BEGIN { print ""2.4.0"" }'
2.40
который оказывается результатом, когда вы делаете
awk 'BEGIN { print 2.4.0 + 0 }'