用linux bash shell格式化文件中的日期字符串

emeijp43  于 2023-05-01  发布在  Shell
关注(0)|答案(3)|浏览(138)

当我cat文件时,输出格式的示例是:

ok: servername Mon May 23 00:00:00 EDT 2018
ok: servername Thu Jul 16 00:00:00 EDT 2019

我希望格式类似于

ok: servername 05/23/2018
ok: servername 07/16/2019

我需要使用Linux bash shell来实现。如果有人能帮助我,我将非常感激。

vaqhlq81

vaqhlq811#

当性能很重要时。在script.awk中输入:

BEGIN{ 
  m["Jan"]="01"; m["Feb"]="02"; m["Mar"]="03"; m["Apr"]="04"; 
  m["May"]="05"; m["Jun"]="06"; m["Jul"]="07" # to be completed
}
{
  print $1, $2, m[$4] "/" $5 "/" $8
}

用法:awk -f script.awk logfile
输出:

ok: servername 05/23/2018
ok: servername 07/16/2019
jqjz2hbq

jqjz2hbq2#

使用GNUx 1 m0n1x,您可以指定一个包含所有日期字符串的输入文件;结合cutpaste

paste -d ' ' \
    <(cut -d ' ' -f-2 infile) \
    <(date -f <(cut -d ' ' -f3- infile) '+%m/%d/%Y')

输出:

ok: servername 05/23/2018
ok: servername 07/16/2019

它使用进程替换为date -f构建一个临时输入文件,并为paste构建一个新的输出文件。

ukxgm1gy

ukxgm1gy3#

根据man date,该命令能够

  • 显示时间由STRING描述,而不是'now'*

通过--date-d。所以如果你把你的值存储在一个变量中

DATE="Thu Jul 16 00:00:00 EDT 2019"

你可以用类似

date --date="${DATE}" +%m/%d/%Y

重新格式化时间戳。
有关更多信息,您可以查看Convert date formats in bash

相关问题