Parece que você entendeu errado as aspas. Você precisa fazer o seguinte
awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv
Isso é explicado na página de manual GNU awk - 3.2 Escape Sequences
Alguns caracteres não podem ser incluídos literalmente em constantes de string ("foo")
ou constantes de expressão regular ( /foo/
). Em vez disso, eles devem ser representados com sequências de escape, que são sequências de caracteres começando com uma barra invertida ( \
). Um uso de uma sequência de escape é incluir um caractere de aspas duplas em uma constante de string. Como uma aspas duplas simples termina a sequência, você deve usar \"
para representar um caractere de aspas duplas real como parte da sequência.
Tanto quanto a razão pela qual eu pude entender a razão do comportamento, awk
parece ter sido interpretada 2.4.0
como uma palavra numérica com aspas extras do seu OP e decide perder a precisão após o primeiro ponto.
ie
$2="\""2.4.0"\""
torna-se apenas
$2=""2.4.0""
que awk
não entende mais como uma string. Você pode reproduzir esse comportamento simplesmente fazendo
awk 'BEGIN { print ""2.4.0"" }'
2.40
que passa a ser o resultado quando você faz
awk 'BEGIN { print 2.4.0 + 0 }'