テキストファイルのデータを操作するために、次のデータ構造を使用しています。
"1111","2222","3333","4444","5555","6666","7777","2017/12/15 16:26:00"
日付の「/」を「-」に変更しようとしています。これは私のawkコマンドです。
awk -F "," '{gsub("/", "-", $8); print}' my-input.txt
/を正常に変更しましたが、「、」カンマを「」空白文字に置き換える意図しない結果が発生します。
"1111" "2222" "3333" "4444" "5555" "6666" "7777" "2017-12-15 16:26:00"
なぜこれが起こるのか知っている人がいますか?
答え1
taliezinとpfnueselが指摘したように、入力ファイルの区切り文字を「、」として定義すると、出力ファイルの区切り文字も「、」として定義する必要があります。出力ファイルの区切り文字が省略され、既存のフィールドが変更された場合、awkはデフォルト値(この場合は '' [スペース]文字)を使用します。
以下は修正されたawkコマンドです。
awk -F "," -v OFS="," '{gsub("/", "-", $8); print}' my-input.txt
「、」を維持すると、期待される結果が出力されます。
"1111","2222","3333","4444","5555","6666","7777","2017-12-15 16:26:00"
答え2
要件は「日付の '/' を '-' に変更」することなので単純な文字置換ですので、sed を使うのはどうでしょうか? sed 's///-/g' my-input.txt