awk -i inplace によりファイルが空になります。

awk -i inplace によりファイルが空になります。
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 inplaceGNUと共に使用すると、awk与えられたファイルの内部編集が行われます。これはawkファイルに書き戻されたプログラムの出力です。プログラムが何も出力しないと、awkファイルは消去されます(これがsed -iGNUの仕組みです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

関連情報