次の入力を含むファイルがあります。
Nov 29 15:15 ,alert_logevent
Nov 29 15:15 ,alert_webhook
Nov 29 15:15 ,appsbrowser
Oct 20 2017 ,ClearPassOnSplunk_2
Oct 10 2017 ,Dnslookup
Oct 12 2017 ,domainCategories
ループなどを使わずにdatetimeをYYYYMMDDHHMMSSに変換したいと思います。
cat SOMEFILE_WITH_DATE_AND_DATE | awk '{print "date -d \""$1, $2, $3"\"" " +" "%Y%m%d%H%M%S" , $4 }'
出力が次のようになりたい
20181129151500,alert_logevent
20181129151500,alert_webhook
20181129151500,appsbrowser
20181129151500,appsbrowser
など。
awkはsystem()関数を試しましたが、2つ以上のパラメータを受け入れませんでした。
ベストアンサー1
予想される出力が入力とどのように関連しているかわかりません。私は以下をお勧めします:
$ perl -MPOSIX -MDate::Parse -pe 's{[^,]*}{
strftime("%Y%m%d%H%M%S", localtime str2time($&))}e' <your-file
20171129151500,alert_logevent
20171129151500,alert_webhook
20171129151500,appsbrowser
20171020000000,ClearPassOnSplunk_2
20171010000000,Dnslookup
20171012000000,domainCategories
date
これらの日付を解析するGNU機能を使用し、date
1行に1つの呼び出しを実行したくない場合は、次のようにします(シェルがkshスタイルプロセスの置き換え(ksh、bash、zshなど)をサポートしていると仮定します)。
paste -d , <(<yourfile cut -d , -f1 | date -f- +%Y%m%d%H%M%S) \
<(<yourfile cut -d , -f2-)
しかし、以下を提供します。
20181129151500,alert_logevent
20181129151500,alert_webhook
20181129151500,appsbrowser
20171020000000,ClearPassOnSplunk_2
20171010000000,Dnslookup
20171012000000,domainCategories
Nov 29 15:15
これがあなたが要求したものですが、これらの音は、将来のタイムスタンプよりも2017年(昨年)のタイムスタンプである可能性が高いため、望むものではないようです。
ここで、日付はls -l
POSIXロケールとして報告されているように見えます。携帯性に優れ適応可能この機能は他のQ&Aからのものです。もっと便利な形式に変換してください。または、より便利で正確であいまいな形式を使用するために使用できるls -l
ファイル日付を最初にファイルに保存するよりも優れた方法(GNU find -printf
、GNU date -r
、zsh stat
、GNU/BSD stat
、ast ls --format
...など)を使用するすることをお勧めします。