このコード
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秒ログイン