CSVから熱を内部変換

CSVから熱を内部変換

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仕様exSed と同様に、(ほぼ)すべての区切り文字が使用可能であることを示します。だから:

printf '%s\n' '%s_^\(..\)/\(..\)/\(....\)_\3-\2-\1_' x | ex file.csv

少しより良いもの。

おすすめ記事