CSVの日付変換に助けが必要です。デフォルトでは、列を変換して新しいファイルとして保存できますが、元のCSVには保存できません。
私のCSVの最初の列DD/MM/YYYY HH:MM
に変換したい日付形式のCSVがあります。YYYY-MM-DD HH:MM
私のCSVファイルには次の内容があります。
29/01/2018 14:07,payable,37159871,,30521316
29/01/2018 14:07,payable,37159872,,30521316
29/01/2018 14:07,payable,37159870,,30521316
29/01/2018 14:07,payable,37159869,,30521316
29/01/2018 14:07,payable,37159868,,30521316
私は次のようなものが欲しい:
2018-01-29 14:07,payable,37159871,,30521316
2018-01-29 14:07,payable,37159872,,30521316
2018-01-29 14:07,payable,37159870,,30521316
2018-01-29 14:07,payable,37159869,,30521316
2018-01-29 14:07,payable,37159868,,30521316
私ができること:
gawk -F, '{split($1, a, "/| "); print a[3]"-"a[2]"-"a[1]" "a[4]}' /path/to/file.csv > test_file
ここでCSVファイルに再保存する方法を知りたいです。
答え1
この例の編集は非常に簡単なので、Awkを使用する必要はありません。
GNU Sedの使用は次のように簡単です。
sed -rie 's_^(..)/(..)/(....)_\3-\2-\1_' file.csv
BSD Sed の場合は、以下を使用します。
sed -Ei '' -e 's_^(..)/(..)/(....)_\3-\2-\1_' file.csv
POSIXツールだけを使用すると、少し見苦しいですが、悪くはありません。
printf '%s\n' '%s/^\(..\)\/\(..\)\/\(....\)/\3-\2-\1/' x | ex file.csv
編集:実際に詳しく見てくださいPOSIX仕様ex
Sed と同様に、(ほぼ)すべての区切り文字が使用可能であることを示します。だから:
printf '%s\n' '%s_^\(..\)/\(..\)/\(....\)_\3-\2-\1_' x | ex file.csv
少しより良いもの。
答え2
awkには「所定の位置で編集」オプションが組み込まれておらず(通常は後ろからコピーとして実装されています)、読み取り後この回答、この場合、私が好む解決策は次のとおりです。
cp入力ファイル一時ファイル&&コマンド...一時ファイル>入力ファイル&& rm一時ファイル
あなたの状況に合わせて:
cp /path/to/file.csv temp_file &&
gawk -F, '{split($1, a, "/| "); print a[3]"-"a[2]"-"a[1]" "a[4]}' < temp_file > /path/to/file.csv &&
rm temp_file
&&
コマンドを一緒にバインドし、前のコマンドが成功した場合にのみ後続のコマンドを実行する構文を参照してください。
答え3
GNU awkを使用しているので:
gawk -i inplace -F, ...
元のファイルをバックアップしたい場合
gawk -i inplace -v INPLACE_SUFFIX=".bak" -F, ...
答え4
次のawkコマンドを使用して同じ効果を得ました。
入力.csv
2018-01-29 14:07,payable,37159871,,30521316
2018-01-29 14:07,payable,37159872,,30521316
2018-01-29 14:07,payable,37159870,,30521316
2018-01-29 14:07,payable,37159869,,30521316
2018-01-29 14:07,payable,37159868,,30521316
注文する
awk '{gsub("/","-",$0);print $0}' input.csv| awk -F "-" '{print $3,$2,$1}' | awk -F " " '{print $1"-"$(NF -1)"-"$NF,$2}'
出力
2018-01-29 14:07,payable,37159871,,30521316
2018-01-29 14:07,payable,37159872,,30521316
2018-01-29 14:07,payable,37159870,,30521316
2018-01-29 14:07,payable,37159869,,30521316
2018-01-29 14:07,payable,37159868,,30521316