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

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

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

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

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

【问题讨论】:

    标签: bash shell sorting csv


    【解决方案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 按字典顺序排序,对吧?
    猜你喜欢
    • 2015-12-24
    • 2021-09-04
    • 2011-01-07
    • 2019-08-23
    • 2014-09-01
    • 2021-02-07
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多