我有一个类似 CSV 的文件,我想按列优先级对其进行排序,例如SQL 中的“ORDER BY” https://dev.mysql.com/doc/refman/8.0/en/sorting-rows.html。例如,给定以下行,
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
我想知道如何使用获得相同的结果sort
Unix 上的命令。
您需要使用两个选项sort
命令:
-
--field-separator
(or -t
)
-
--key=<start,end>
(or -k
),指定排序键,即排序依据的列范围(从开始索引到结束索引)。由于您想要对 3 列进行排序,因此您需要指定-k
3次,对于列2,2
, 1,1
, and 3,3
.
把这一切放在一起,
sort -t ';' -k 2,2 -k 1,1 -k 3,3
注意sort
无法处理字段包含分隔符的情况,即使它被转义或引用。
另请注意:这是一个老问题,属于 UNIX.SE,并且是那里也问了 https://unix.stackexchange.com/questions/52762/trying-to-sort-on-two-fields-second-then-first一年后。
旧答案:取决于您的系统版本sort
,以下也可能有效:
sort --field-separator=';' --key=2,1,3
或者,您可能会得到“字段规范中的杂散字符”。
根据排序手册 https://man7.org/linux/man-pages/man1/sort.1.html,如果不指定排序键的结束列,则默认为行尾。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)