Bash:按前四列对CSV文件进行排序

13
我有一个以“;”为分隔符的csv文件,其中有8个字段。我想按照前4列的顺序(首先按列1排序,然后是列2等)升序排序我的数据。
我该如何在Linux命令行中完成这个任务?
我尝试使用Open Office,但它只让我选择3列。
编辑:我想要对其进行排序的字段中,三个字段包含数字值的字符串,一个字段仅包含字符串。如何使用sort命令指定这一点?
2个回答

22

尝试:

sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n test.txt

eg:

1;2;100;4
1;2;3;4
10;1;2;3
9;1;2;3

> sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n temp3
1;2;3;4
1;2;100;4
9;1;2;3
10;1;2;3

谢谢。这里的 1,1n 是什么意思? - Ricky Robinson
哦,好的。那么,如果字段3包含字符串,我要做-k 3,3d来按字典顺序排序,对吗? - Ricky Robinson

9

sort -k 可以帮助你定义排序的关键字。来自 man sort

-k, --key=POS1[,POS2]
       start a key at POS1 (origin 1), end it at POS2 (default end of line). 

所以
$ sort -t\; -k1,4

应该这样做。请注意,我已经转义了分号,否则shell将把它解释为语句结束符。


谢谢。sort命令是否允许为每个字段指定是按数字还是按字母排序?(请参见我的最后一次编辑) - Ricky Robinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接