排序命令在unix中无法正常工作以排序csv文件

时间:2014-11-06 15:10:08

标签: linux

我有一个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年等......

我怎样才能实现这个目标?

3 个答案:

答案 0 :(得分:0)

试试这个:

sort -rft',' -k3 merged.csv

答案 1 :(得分:0)

我会尝试按日期排序

awk -F"," '{print $3,$1,$2}' file.csv | sort -d' ' -k 1d -k 2d
顺便说一下,如果你只是分享你文件的一小部分就会很棒。 :)

答案 2 :(得分:0)

以下应该有效

 awk 'NR<2{print $_;next}{ print $_ | "sort -t, -k3.8,3.11rn -k3.1,3.3rM -k3.5,3.6rn -k3.12rd" }'

&#39; awk&#39; snippet将除header之外的所有行传递给sort命令。 密钥的顺序在这里很重要:

k3.8,3.11rn提取列的年份部分并反向排序

k3.1,3.3rM提取第三列中的前3个字符,每月进行反向排序,其余的我们进行反向字典排序

k3.5,3.6rn提取日期并反向排序,最后我们也会做同样的时间