Parece que tienes las citas equivocadas. Necesitas hacer lo siguiente
awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv
Esto se explica en la página de manual de GNU awk - 3.2 Secuencias de escape
Algunos caracteres no se pueden incluir literalmente en constantes de cadena ("foo")
o constantes regexp ( /foo/
). En cambio, deben representarse con secuencias de escape, que son secuencias de caracteres que comienzan con una barra diagonal inversa ( \
). Un uso de una secuencia de escape es incluir un carácter de comillas dobles en una constante de cadena. Debido a que una comilla doble simple termina la cadena, debe usarla \"
para representar un carácter real de comillas dobles como parte de la cadena.
En cuanto a la razón por la que pude entender la razón del comportamiento, awk
parece haber interpretado 2.4.0
como una palabra numérica con las comillas adicionales de su OP y decide perder la precisión después del primer punto.
es decir
$2="\""2.4.0"\""
se vuelve justo
$2=""2.4.0""
que awk
ya no entiende como una cadena. Puede reproducir este comportamiento simplemente haciendo
awk 'BEGIN { print ""2.4.0"" }'
2.40
que resulta ser el resultado cuando lo haces
awk 'BEGIN { print 2.4.0 + 0 }'