我有一个类似 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/