BASHからフライトの日時変換

BASHからフライトの日時変換

次の入力を含むファイルがあります。

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機能を使用し、date1行に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 -lPOSIXロケールとして報告されているように見えます。携帯性に優れ適応可能この機能は他のQ&Aからのものです。もっと便利な形式に変換してください。または、より便利で正確であいまいな形式を使用するために使用できるls -lファイル日付を最初にファイルに保存するよりも優れた方法(GNU find -printf、GNU date -r、zsh stat、GNU/BSD stat、ast ls --format...など)を使用するすることをお勧めします。

おすすめ記事