Bash:按前 4 列对 csv 文件进行排序

Posted

技术标签:

【中文标题】Bash:按前 4 列对 csv 文件进行排序【英文标题】:Bash: sort csv file by first 4 columns 【发布时间】:2012-08-09 17:05:34 【问题描述】:

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

如何在 linux 的命令行中执行此操作?

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

编辑:在我想要对数据进行排序的字段中,三个字段包含带有数值的字符串,一个只有字符串。如何使用sort 命令指定它?

【问题讨论】:

【参考方案1】:

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 是否还允许为每个字段指定我要按数字还是字母顺序排序? (见我上次的编辑)【参考方案2】:

试试:

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

【讨论】:

谢谢。这里1,1n是什么意思? 哦,好的。所以,假设字段 3 包含字符串,我会做 -k 3,3d 按字典顺序排序,对吧?

以上是关于Bash:按前 4 列对 csv 文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按列对 csv 文件进行排序

按列对csv进行排序

PySpark Python使用列对数据框进行排序

按列对python数组/recarray进行排序

在C#中按列对二维数组进行排序

使用超过 1 列对 excel 数据进行排序