这段代码
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:06: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:06:58登录