Shell

更改從文本文件顯示的日期格式

  • December 22, 2017

這段程式碼

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 登錄。

unixdate命令可以以您想要的任何格式列印日期。使用該--date標誌,您可以列印與目前日期和時間不同的日期和時間。但是,對於date解析日期的命令,您必須刪除輸入日期中的on。您可以使用以下 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 命令結合使用,假設您始終具有相同的格式*“username logged in at date”* ,這可以很容易地完成。請注意,您可以完全不列印onawk,因此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 登錄

引用自:https://unix.stackexchange.com/questions/412600