我有一个 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 之外的所有行传递给排序命令。
键的顺序在这里很重要:
k3.8,3.11rn
提取列的年份部分并反向排序
k3.1,3.3rM
提取第三列中的前 3 个字符进行每月反向排序,其余的我们进行反向字典排序
k3.5,3.6rn
提取日期并反向排序,最后我们对时间执行相同的操作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)