2012-08-13 109 views
12

我有一个csv文件,其中的字段用“;”分隔。有8个字段,我想排序我的数据的前4列,按递增顺序(首先按列1,然后列2等排序)bash:按前4列对csv文件进行排序

我怎么能做到这一点从Linux的命令行?

我试着用开放式办公室,但它只让我选择3列。

编辑:在我想对数据进行排序的字段中,三个字段包含带有数值的字符串,一个字符串。我怎样才能用sort命令指定呢?

回答

20

尝试:

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

如:

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 
+0

谢谢。 '1,1n'在这里的含义是什么? – 2012-08-13 13:18:03

+0

按数字排序 – Vijay 2012-08-13 13:21:24

+0

噢好的。因此,假设字段3包含字符串,我将执行'-k 3,3d'按字典顺序排序,对吧? – 2012-08-13 13:26:01

8

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会将其解释为语句结束。

+0

谢谢。 'sort'是否也允许为每个字段指定是否要按数字或按字母顺序排序? (看我最后一次编辑) – 2012-08-13 13:20:22

相关问题