在上述代码中:| awk '{ print $1, $2 }'
AWK $ 2 在其中“星期四11月19日17:00:00 ”。我想在非军事格式“ Thu Nov 19 05:00:00 PM PM ”中以内联awk操纵此日期字符串。请帮忙。
答案 0 :(得分:3)
这一行应该为您提供预期的格式:
kent$ echo "Thu Nov 19 17:00:00 2015"|awk '{d=$0;cmd="date -d\""d"\" +\"%a %b %d %r %Y\"" ;cmd|getline $0;close(cmd)}7'
Thu Nov 19 05:00:00 PM 2015
kent$ echo "FOO,Thu Nov 19 17:00:00 2015"|awk -F, '{d=$2;cmd="date -d\""d"\" +\"%a %b %d %r %Y\"" ;cmd|getline $2;close(cmd);print "col1:"$1 RS "col2:"$2}'
col1:FOO
col2:Thu Nov 19 05:00:00 PM 2015
答案 1 :(得分:3)
$ echo "Thu Nov 19 17:00:00 2015" |
awk '{
split($4,t,/:/)
if (t[1]<12) {
ampm="AM"
if (t[1]==0) {
t[1]=12
}
}
else {
ampm="PM"
if (t[1]>12) {
t[1]=t[1]-12
}
}
$4=sprintf("%02d:%02d:%02d %s",t[1],t[2],t[3],ampm)
} 1'
Thu Nov 19 05:00:00 PM 2015
答案 2 :(得分:2)
使用GNU awk:
gawk -F, -v OFS=, '
BEGIN {months = "..JanFebMarAprMayJunJulAugSepOctNovDec"}
function monthName2Num(monthname) {
return index(months, monthname)/3
}
function convertTime(datetime, a,t) {
split(datetime, a, "[ :]+")
t = mktime(a[7]" "monthName2Num(a[2])" "a[3]" "a[4]" "a[5]" "a[6])
return strftime("%a %b %e %r %Y", t)
}
{ print $1, convertTime($2) }
' <<'END'
something,Thu Nov 19 17:00:00 2015
END
输出
something,Thu Nov 19 05:00:00 PM 2015