我有一个带有这样日期字段的文件。
20|1|124|Mar 19 2016 3:00AM
20|1|144|Mar 19 2016 2:00PM
43|1|146|Mar 19 2016 5:30AM
42|1|158|Mar 19 2016 1:50PM
40|1|15|Mar 19 2016 2:30AM
我想按日期字段排序,以便 AM 将在 PM 之前出现。 到目前为止,我有这个:
sort -t"|" -k4 testfile.
但我不确定如何对"AM"和"PM"部分进行排序。任何帮助,不胜感激。
您可以使用:
while read -r; do
IFS='|' read -ra arr <<< "$REPLY"
date -d "${arr[-1]}" "+$REPLY#%s"
done < file | sort -t# -k2 | cut -d# -f1
40|1|15|Mar 19 2016 2:30AM
20|1|124|Mar 19 2016 3:00AM
43|1|146|Mar 19 2016 5:30AM
42|1|158|Mar 19 2016 1:50PM
20|1|144|Mar 19 2016 2:00PM
使用date
命令,我们解析管道分隔字段中的最后一个字段,并在每行中添加由 #
分隔的 EPOCH 值。然后使用sort
我们按第二个字段(EPOCH值)进行排序,最后使用cut
我们在#
之后丢弃值。
可以使用临时分隔符(即|
)将AM
/PM
设置为可用作排序字段的列:
$ cat sourcefile | sed 's/(.)M$/|1M/' | sort -t"|" -k5 -k4 | sed 's/|(.)M/1M/'
40|1|15|Mar 19 2016 2:30AM
20|1|124|Mar 19 2016 3:00AM
43|1|146|Mar 19 2016 5:30AM
42|1|158|Mar 19 2016 1:50PM
20|1|144|Mar 19 2016 2:00PM