$ cat input.txt | awk -F '|' '{sprintf("date +%%s -d \"%s\"", $3) | getline tm}; {print tm "\t" $0}' | sort | cut -f2-
pea soup|10.00|05 Jan 2012
peas|10.00|05 Apr 2012
ham|10.00|06 Apr 2012
Если вы не хотите называть внешней командой date
,
вы можете написать пользовательскую функцию mktime2
в awk
:
#!/bin/gawk -f
# script.awk
BEGIN {
FS="|"
m["Jan"] = "01"
m["Feb"] = "02"
m["Mar"] = "03"
m["Apr"] = "04"
m["May"] = "05"
m["Jun"] = "06"
m["Jul"] = "07"
m["Aug"] = "08"
m["Sep"] = "09"
m["Oct"] = "10"
m["Nov"] = "11"
m["Dec"] = "12"
}
{
print mktime2($3) "\t" $0 | "sort | cut -f2-"
}
function mktime2(s, arr,yyyy,mm,dd)
{
split(s, arr, " ")
yyyy = arr[3]
mm = m[arr[2]]
dd = arr[1]
return mktime(sprintf("%s %s %s 00 00 00", yyyy, mm, dd))
}
# make script executable
$ chmod +x script.awk
# run the script
$ ./script.awk input.txt
pea soup|10.00|05 Jan 2012
peas|10.00|05 Apr 2012
ham|10.00|06 Apr 2012
причин для downvote? – kev
спасибо за ответ и импровизированный awk intro ahaha – segfaulter09