PSt*_*ons 17 awk command-line datetime
我有一个包含许多文本列的文件,包括一行的时间戳Fri Jan 02 18:23
,我需要将该日期转换为MM/DD/YYYY HH:MM
格式.
我一直在尝试使用带有awk getline的标准"date"工具来进行转换,但我无法弄清楚如何以预期的格式将字段传递给'date'命令(引用"或") s,)因为getline也需要用引号括起来的命令字符串.
就像是 "date -d '$1 $2 $3 $4' +'%D %H:%M'" | getline var
现在我考虑一下,我想我真正想问的是如何将awk变量嵌入到字符串中.
Pau*_*ce. 21
如果您使用GAWK,你不需要外部date
可以是昂贵的重复调用:
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)
感谢ghostdog74从这个答案的几个月数组.
gho*_*g74 17
你可以试试这个.假设您指定的日期在文件中
awk '
{
cmd ="date \"+%m/%d/%Y %H:%M\" -d \""$1" "$2" "$3" "$4"\""
cmd | getline var
print var
close(cmd)
}' file
Run Code Online (Sandbox Code Playgroud)
产量
$ ./shell.sh
01/02/2010 18:23
Run Code Online (Sandbox Code Playgroud)
如果您不使用GNU工具,例如您在Solaris中,请使用nawk
nawk '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)
}
cmd="date +%Y"
cmd|getline yr
close(cmd)
}
{
day=$3
mth=months[$2]
print mth"/"day"/"yr" "$4
} ' file
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
40135 次 |
最近记录: |