根据第一列对 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 文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章

C++ 使用冒泡排序根据第一列对二维数组的行进行排序

Bash:按前 4 列对 csv 文件进行排序

如何根据一列对查询结果进行排序?

对没有标题和第一列的csv文件中的行进行排序

按一列对每个组进行排序,并根据每个组获取顶部元素

python如何根据csv中一列的内容对另一列进行写入