您可以使用 Bash 工具将日期转换为时间戳、添加此信息、排序并将其删除:
while IFS=, read -r day year hour; do
printf "%s %s, %s, %s\n" "$(date -d"$day $year $hour" +"%s")" "$day" "$year" "$hour"
done < file | sort -n | cut -d' ' -f2-
假设格式为day, year, hour 格式。
一步一步
让我们将日期转换为时间戳:
while IFS=, read -r day year hour;
do
printf "%s %s, %s, %s\n" "$(date -d"$day $year $hour" +"%s")" "$day" "$year" "$hour"
done < a
1450648800 December 20, 2015, 11:00pm
1416265200 November 18, 2014, 12:00am
1349472600 October 05, 2012, 11:30pm
1349191800 October 02, 2012, 5:30pm
1349044200 October 01, 2012, 12:30am
1285925400 October 01, 2010, 11:30am
1317497400 October 01, 2011, 9:30pm
让我们排序:
while IFS=, read -r day year hour;
do
printf "%s %s, %s, %s\n" "$(date -d"$day $year $hour" +"%s")" "$day" "$year" "$hour"
done < a | sort -n
1285925400 October 01, 2010, 11:30am
1317497400 October 01, 2011, 9:30pm
1349044200 October 01, 2012, 12:30am
1349191800 October 02, 2012, 5:30pm
1349472600 October 05, 2012, 11:30pm
1416265200 November 18, 2014, 12:00am
1450648800 December 20, 2015, 11:00pm
让我们删除临时时间戳:
$ while IFS=, read -r day year hour;
do
printf "%s %s, %s, %s\n" "$(date -d"$day $year $hour" +"%s")" "$day" "$year" "$hour"
done < a | sort -n | cut -d' ' -f2-
October 01, 2010, 11:30am
October 01, 2011, 9:30pm
October 01, 2012, 12:30am
October 02, 2012, 5:30pm
October 05, 2012, 11:30pm
November 18, 2014, 12:00am
December 20, 2015, 11:00pm