使用单个awk命令将日期格式从文本更改为数字

问题描述 投票:0回答:1

我有一个非常大的日志文件,每小时需要处理并保存为csv格式。

格式如下(在使用sed删除许多字符后,此行也是如此)

Apr-05 11:10:12 xxxx xxx xxxx xxxx xxxx

我需要另存为

04-05 11:10:12,xxxx,xxx,xxxx,xxxx,xxxx

我尝试使用$ 1设置变量,并尝试使用GNU日期将其转换,但不起作用

awk -v fixdate="($1 +%m-)" '{print fixdate"-"$2" "$3 "," $x "," $y "," $z}'

我更喜欢单行方法。

如何在打印前将$ 1(Apr-05)部分分配给awk变量并使用GNU日期对其进行处理。

logging awk sed gnu-date
1个回答
0
投票

您能不能尝试以下内容。考虑到您的Input_file每个月有3个字母,如果没有,请相应地更改split的数组,然后它应该可以工作。

awk '
BEGIN{
  FS=OFS="-"
  num=split("jan feb mar apr may jun jul aug sep oct nov dec",array," ")
  for(i=1;i<=num;i++){
    month[array[i]]=sprintf("%02d",i)
  }
}
{
  $1=tolower($1) in month?month[tolower(tolower($1))]:$1
}
1
'  Input_file
© www.soinside.com 2019 - 2024. All rights reserved.