根据第一列对CSV文件进行排序

fid*_*dle 19 unix csv sorting bash shell

有没有办法使用一些shell命令基于第一列对csv文件进行排序?

我有超过150k线的这个巨大的文件,因此我可以在excel中做到:(有替代方式吗?

Tra*_*vis 39

sort -k1 -n -t, filename 应该做的伎俩.

-k1 按第1列排序.

-n 用数字排序而不是按字典顺序排序(所以"11"不会出现在"2,3 ......"之前).

-t,设置分隔符(文件中的值分隔的内容),,因为您的文件是逗号分隔的.

  • 注意:此方法在条目包含换行符的有效 CSV 文件上**失败**,因此一个 CSV 条目跨越文件中的多行。 (3认同)
  • 将字段分隔符`-t`设置为`,`可能很方便?;-) (2认同)

Jos*_*ter 12

使用csvsort

  1. csvkit如果尚未安装,请安装。

    brew install csvkit
    
    Run Code Online (Sandbox Code Playgroud)
  2. 按第一列对 CSV 进行排序。

    csvsort -c 1 original.csv > sorted.csv
    
    Run Code Online (Sandbox Code Playgroud)

  • 这是处理跨多行的有效条目的唯一答案之一。 (7认同)
  • @fiddle 现有的解决方案对我的数字列进行了错误的排序,但是,“csvsort”与默认值完美配合。这对我来说是一件有用的事情,也可能对其他人有用。只有时间会给出答案。 (4认同)

Bha*_*han 8

我不知道为什么上述解决方案在我的情况下不起作用。

15,5
17,2
18,6
19,4
8,25
8,90
9,47
9,49
10,67
10,90
13,96
159,9
Run Code Online (Sandbox Code Playgroud)

但是这个命令解决了我的问题。

sort -t"," -k1n,1 fileName
Run Code Online (Sandbox Code Playgroud)

  • 这个答案对我有用,而接受的答案失败了。 (3认同)
  • 注意:此方法在条目包含换行符的有效 CSV 文件上**失败**,因此一个 CSV 条目跨越文件中的多行。 (2认同)