更改文本文件显示的日期格式

更改文本文件显示的日期格式

这段代码

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登录

相关内容