根据第一列对 CSV 文件进行排序
Posted
技术标签:
【中文标题】根据第一列对 CSV 文件进行排序【英文标题】:Sort CSV file based on first column 【发布时间】:2014-12-02 15:49:34 【问题描述】:有没有办法使用一些 shell 命令根据第一列对 csv 文件进行排序?
我有一个超过 150k 行的大文件,因此我可以在 excel 中完成:( 有其他方法吗?
【问题讨论】:
你试过sort
命令吗??详情见man sort
【参考方案1】:
我不知道为什么上述解决方案不适用于我的情况。
15,5
17,2
18,6
19,4
8,25
8,90
9,47
9,49
10,67
10,90
13,96
159,9
但是这个命令解决了我的问题。
sort -t"," -k1n,1 fileName
【讨论】:
注意:对于条目包含换行符的有效 CSV 文件,此方法将失败,因此一个 CSV 条目跨越文件中的多行。【参考方案2】:使用csvsort
。
如果尚未安装,请安装 csvkit
。
brew install csvkit
按第一列排序 CSV。
csvsort -c 1 original.csv > sorted.csv
【讨论】:
不必要的安装,如果可以使用已有的工具来完成。 @fiddle 现有的解决方案对我的数字列进行了错误的排序,但是,csvsort
与默认值完美配合。这对我有用,对其他人也可能有用。只有时间会证明一切。
这是唯一一个处理跨多行的有效条目的答案。【参考方案3】:
sort -k1 -n -t, filename
应该可以解决问题。
-k1
按第 1 列排序。
-n
按数字而非字典顺序排序(因此“11”不会出现在“2,3...”之前)。
-t,
将分隔符(用于分隔文件中的值)设置为 ,
,因为您的文件是逗号分隔的。
【讨论】:
将字段分隔符-t
设置为 ,
可能很方便? ;-)
注意:对于条目包含换行符的有效 CSV 文件,此方法将失败,因此一个 CSV 条目跨越文件中的多行。
只按一列排序,你应该使用-k1,1
(见superuser.com/questions/33362/…)
对其他想要使用此功能的人发表评论:如果您的分隔符是 分号 ;
而不是逗号,那么您可能需要转义它:@987654331 @以上是关于根据第一列对 CSV 文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章