テキストファイルに表示される日付形式の変更

テキストファイルに表示される日付形式の変更

このコード

grep -i 'logged in' path-to-file | tail | awk '{ print $6,"logged in at",substr($2,1,8),"on",$1"."; }' | sed 's/"//g'

出力されます

このニックネームは2017年12月22日22:06:58にログインしました。

私が望むものは次のように出力されます。

ニックネームは2017年12月22日午後10時6分58秒にログインしました。

ベストアンサー1

unixdateコマンドは、希望の形式で日付を印刷できます。この--dateフラグを使用すると、現在の日付と時刻とは異なる日付と時刻を印刷できます。ただし、date日付を解析するコマンドの場合は削除する必要があります。存在する入力した日付に次のsedコマンドを使用できます。

sed -r 's,\s+on\s+, ,g'

希望の出力形式と組み合わせると、次のようになります。

date --date="$(echo '22:06:58 on 2017-12-22' | sed -r 's,\s+on\s+, ,g')" '+%r on %B %d, %Y'

これでawkコマンドと組み合わせることができます。これは常に同じ形式を使用していると仮定すると簡単に実行できます。「ユーザー名ログイン日」。持っているかもしれません。存在するawk何も印刷されないので、次sedを呼び出す必要はありません。

while read line
do
    echo $line | awk '{print $1" "$2" "$3" "$4" "}' | tr -d '\n'
    date --date="$(echo $line | awk '{print $5" "$7}' | tr -d '.')" '+%r on %B %d, %Y'
done

提示した例では、次のように印刷されます(localeを使用en-NZ)。

ニックネーム2017年12月22日午後10時6分58秒ログイン

おすすめ記事