Tampaknya Anda salah mengutip. Anda perlu melakukan seperti di bawah ini
awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv
Ini dijelaskan di halaman manual GNU awk - 3.2 Escape Sequences
Beberapa karakter tidak dapat dimasukkan secara harfiah dalam konstanta string ("foo")
atau konstanta regexp ( /foo/
). Sebaliknya, mereka harus diwakili dengan urutan melarikan diri, yang merupakan urutan karakter dimulai dengan garis miring terbalik ( \
). Salah satu penggunaan urutan pelarian adalah memasukkan karakter tanda kutip ganda dalam konstanta string. Karena kutipan ganda sederhana mengakhiri string, Anda harus menggunakan \"
untuk mewakili karakter kutipan ganda yang sebenarnya sebagai bagian dari string.
Sejauh alasan saya bisa memahami alasan perilaku itu, awk
tampaknya telah ditafsirkan 2.4.0
sebagai kata numerik dengan kutipan tambahan dari OP Anda dan memutuskan untuk kehilangan presisi setelah titik pertama.
yaitu
$2="\""2.4.0"\""
menjadi adil
$2=""2.4.0""
yang awk
tidak lagi dipahami sebagai string. Anda dapat mereproduksi perilaku ini hanya dengan melakukan
awk 'BEGIN { print ""2.4.0"" }'
2.40
yang kebetulan merupakan hasil ketika Anda melakukannya
awk 'BEGIN { print 2.4.0 + 0 }'