.csv
ファイルに列(2番目の場所)を追加し、その列の値を文字列にして引用符で囲みます。
次のコマンドは列を追加しますが、引用符は付けません。
awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv
次のアプローチは引用符を組み込んでいますが、何らかの理由で最後の.
(ドット)を値から削除します
awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv
したがって、私の値は「2.40」になります。
これについてどうすればいいですか?
引用符が間違っているようです。以下のようにする必要があります
awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv
これは GNU awk manページ-3.2エスケープシーケンス で説明されています
一部の文字は、文字列定数
("foo")
または正規表現定数(/foo/
)にそのまま含めることができません。代わりに、バックスラッシュ(\
)で始まる文字シーケンスであるエスケープシーケンスで表す必要があります。エスケープシーケンスの1つの用途は、文字列定数に二重引用符を含めることです。プレーンな二重引用符で文字列が終了するため、実際の二重引用符文字を文字列の一部として表すには、\"
を使用する必要があります。
動作の理由を理解できた限り、awk
は2.4.0
をOPからの余分な引用符を含む数値のWordとして解釈し、最初のドットの後に精度を失うことにしました。
つまり.
$2="\""2.4.0"\""
ちょうどなる
$2=""2.4.0""
awk
は文字列として理解できなくなりました。この動作を再現するには、次のようにします。
awk 'BEGIN { print ""2.4.0"" }'
2.40
あなたがするとき、それはたまたま結果です
awk 'BEGIN { print 2.4.0 + 0 }'