168,1331122362,412482,,111,,3654
上記のCSVがあり、2番目の列はタイムスタンプです。そのタイムスタンプを日付/時刻形式に変換する必要があります。次のawk文を使用しています。
awk -i inplace -F"," '{OFS=","; $2=strftime("%Y-%m-%d %H:%M:%S", $2);}' file.csv
inplace オプションを削除して「print$0」を追加すると、期待どおりに機能しますが、inplace オプションを使用してこれを行うと、csv ファイルが消去されます。私は周りを見回したが、同様の問題を持つ人を見つけることができなかったので、私の声明に何か問題があると仮定していますが、それが何であるかはわかりません。たぶん私はawk / sedにまったく慣れていないからです。
答え1
-i inplace
GNUと共に使用すると、awk
与えられたファイルの内部編集が行われます。これはawk
ファイルに書き戻されたプログラムの出力です。プログラムが何も出力しないと、awk
ファイルは消去されます(これがsed -i
GNUの仕組みですsed
)。
したがって、使用する必要があります
awk -i inplace -F ',' '{ OFS=","; $2 = strftime("%Y-%m-%d %H:%M:%S", $2); print }' file.csv
OFS
または、各入力行の設定を避けるには、次の手順を実行します。
awk -i inplace -F ',' -v OFS=',' '{ $2 = strftime("%Y-%m-%d %H:%M:%S", $2); print }' file.csv
またはより短く、
awk -i inplace -F ',' -v OFS=',' '{ $2 = strftime("%F %T", $2) }; 1' file.csv