date -d UNIX コマンドで dd/mm/yyyy 日付文字列を読み取るには?

date -d UNIX コマンドで dd/mm/yyyy 日付文字列を読み取るには?

dd/mm/yyyy hh:mm:ss 形式の日付を含むテキストファイルの列を yy-mm-dd hh:mm:ss に動的に変換しようとしています。次のコマンドは機能しますが、必要に応じてyy-mm-dd形式ではなくyy-dd-mm形式で出力を提供します。

echo $(date -d "8/11/2018 06:20:57 AM" "+%y-%m-%d %H:%M:%S")

出力:

18-08-11 06:20:57

また、次のように最初の数字を日ではなく月として処理するため、12より大きい日付では機能しません。

echo $(date -d "28/11/2018 06:20:57 AM" "+%y-%m-%d %H:%M:%S")

出力:

date: invalid date ‘28/11/2018 06:20:57 AM’

動作させる方法はありますか?

ベストアンサー1

まず、前処理することをお勧めします。私の最高のチャンスはsed

echo "28/11/2018 06:20:57 PM" | sed -E "s/([0-9]+)\/([0-9]+)\/([0-9]+) ([0-9]+):([0-9]+):([0-9]+) ([APM]{2})/\3\/\2\/\1 \4:\5:\6 \7/g" | xargs -I II date -d II "+%y-%m-%d %H:%M:%S"

おすすめ記事