csv - 使用 "sort"命令按多列对 CSV 文件进行排序

标签 csv sorting unix

我有一个类似 CSV 的文件,我想按列优先级对其进行排序,例如 "ORDER BY" in SQL 。例如,给定以下行,

3;1;2
1;3;2
1;2;3
2;3;1
2;1;3
3;2;1

如果“ORDER BY”为column2、column1、column3,结果将是:

2;1;3
3;1;2
1;2;3
3;2;1
1;3;2
2;3;1

我想知道如何在 Unix 上使用 sort 命令获得相同的结果。

最佳答案

您需要对 sort 使用两个选项命令:

  • --field-separator (或-t)
  • --key=<start,end> (或 -k ),指定排序键,即排序依据的列范围(从开始索引到结束索引)。由于您想要对 3 列进行排序,因此您需要指定 -k 3次,对于列2,2 , 1,1 ,和3,3 .

把它们放在一起,

sort -t ';' -k 2,2 -k 1,1 -k 3,3

请注意sort无法处理字段包含分隔符的情况,即使它被转义或引用。

另请注意:这是一个老问题,属于 UNIX.SE,并且是 also asked there一年后。

<小时/>

旧答案:取决于您的系统版本sort ,以下内容也可能有效:

sort --field-separator=';' --key=2,1,3

或者,您可能会得到“字段规范中的杂散字符”。

根据sort manual ,如果不指定排序键的结束列,则默认为行尾。

关于csv - 使用 "sort"命令按多列对 CSV 文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9471101/

相关文章:

python - 替换csv文件python的第一行

algorithm - 对部分排序列表进行排序的最佳方法是什么?

linux - 将度坐标转换为十进制

chdir() 到主目录

python - 解释每个 open() 语句一次读取操作的行为?

python - 用逗号替换每行中的多个空格

performance - haskell : matrix sorting much slower than vector sorting

linux - Windows 上 ubuntu 服务器和 ubuntu 客户端的不同行为

csv - 使用 bash 或 awk 打乱大型 csv 文件的行和列

arrays - 相对排序两个数组的最小交换