คุณดูเหมือนจะมีคำพูดที่ไม่ถูกต้อง คุณต้องทำดังต่อไปนี้
awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv
นี่คือคำอธิบายในหน้าGNU awk man - 3.2 Escape Sequences
อักขระบางตัวไม่สามารถรวมอย่างแท้จริงในค่าคงที่สตริง("foo")
หรือค่าคงที่ regexp ( /foo/
) แต่ควรแสดงด้วย escape sequences ซึ่งเป็นลำดับอักขระที่เริ่มต้นด้วย backslash ( \
) การใช้งานหนึ่งในลำดับของการหลบหนีคือการรวมอักขระเครื่องหมายคำพูดคู่ในค่าคงที่สตริง เนื่องจากเครื่องหมายคำพูดคู่ธรรมดาลงท้ายด้วยสตริงคุณต้องใช้\"
เพื่อแสดงอักขระเครื่องหมายคำพูดคู่จริงเป็นส่วนหนึ่งของสตริง
เท่าที่เหตุผลที่ฉันสามารถเข้าใจสาเหตุของพฤติกรรมawk
ดูเหมือนว่าจะตีความ2.4.0
ว่าเป็นคำที่เป็นตัวเลขที่มีคำพูดพิเศษจาก OP ของคุณและตัดสินใจที่จะสูญเสียความแม่นยำหลังจากจุดแรก
กล่าวคือ
$2="\""2.4.0"\""
กลายเป็นเพียงแค่
$2=""2.4.0""
ซึ่งawk
ไม่เข้าใจว่าเป็นสตริงอีกต่อไป คุณสามารถทำให้เกิดพฤติกรรมนี้ได้โดยเพียงแค่ทำ
awk 'BEGIN { print ""2.4.0"" }'
2.40
ซึ่งเกิดขึ้นเป็นผลเมื่อคุณทำ
awk 'BEGIN { print 2.4.0 + 0 }'