使用awk将月份从Aaa转换为xx

She*_*Psy 4 awk type-conversion

我试图报告每个日期创建的文件数.我可以用这个小衬里做到这一点:

ls -la foo*.bar|awk '{print $7, $6}'|sort|uniq -c
Run Code Online (Sandbox Code Playgroud)

我也得到很多fooxxx.bar文件是如何被创建日期列表,但当月的格式为:AAA(即:4月),我想XX(即:04).

我觉得答案就在这里:

awk '
BEGIN{
   m=split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec",d,"|")
   for(o=1;o<=m;o++){
      months[d[o]]=sprintf("%02d",o)
    }
format = "%m/%d/%Y %H:%M"
}
{
split($4,time,":")
date = (strftime("%Y") " " months[$2] " " $3 " " time[1] " " time[2] " 0")
print strftime(format, mktime(date))
}'
Run Code Online (Sandbox Code Playgroud)

但是不知道我需要剥离什么,也不知道如何将7美元转移到我开辟的任何东西以将4月转换为04.

谢谢!

Ed *_*ton 12

这是将缩写的月份名称转换为awk中的数字的惯用方法:

$ echo "Feb" | awk '{printf "%02d\n",(index("JanFebMarAprMayJunJulAugSepOctNovDec",$0)+2)/3}'
02

$ echo "May" | awk '{printf "%02d\n",(index("JanFebMarAprMayJunJulAugSepOctNovDec",$0)+2)/3}'
05
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息来解决问题,请告诉我们.


Pau*_*ce. 0

只需使用月份的字段编号作为数组的索引即可months

print months[$6]
Run Code Online (Sandbox Code Playgroud)

由于ls输出因系统而异,有时在同一系统上取决于文件年龄,并且您没有给出任何示例,因此我无法知道如何进一步指导您。

哦,不要解析ls