我有一个csv文件,我需要订购基于时间戳。这是csv中的第三列,我使用以下命令进行排序:
awk 'NR<2{print $_;next}{ print $_ | "sort -t, -k3.8,3.11nr -k3.1,3.3rM -k3.4rd" }'
当年份是单一的时,此命令将正确排序,但是对于存在多个年份的大型数据,它将旧的年份放在csv的第一个或介于两者之间。示例如下:
data2,Send for Translation To CTM,Dec 30 2013 02:22
data1,Send for Translation To CTM,Dec 30 2013 02:20
data1,Send for Translation To CTM,Sep 30 2014 03:22
data2,Send for Translation To CTM,Oct 30 2014 03:21
我需要把最新时间戳和年份的数据按以下顺序排列:2014、2013、2012等等…
我怎么能吃这个?
最佳答案
下面应该有用
awk 'NR<2{print $_;next}{ print $_ | "sort -t, -k3.8,3.11rn -k3.1,3.3rM -k3.5,3.6rn -k3.12rd" }'
“awk”代码段将除header以外的所有行传递给sort命令。
钥匙的顺序在这里很重要:
k3.8,3.11rn
提取列的年份部分并反向排序k3.1,3.3rM
提取第三列中的前3个字符进行每月反向排序,其余的进行字典反向排序k3.5,3.6rn
提取日期并反向排序,最后我们对时间执行相同的操作