代码之家  ›  专栏  ›  技术社区  ›  user4687531

第n列bash问题排序

  •  4
  • user4687531  · 技术社区  · 9 年前

    我正在运行以下命令来处理一些CSV数据

    grep -i "area harvested.*2005" ps1_apricot_countries_2005.csv | sed 's/\"//g'
    

    结果如下(前7项记录仅作为示例显示):

    Afghanistan,31,Area Harvested,2005,Ha,5200.00000,F
    Africa +,31,Area Harvested,2005,Ha,59536.00000,A
    Albania,31,Area Harvested,2005,Ha,400.00000,F
    Algeria,31,Area Harvested,2005,Ha,22888.00000,
    Americas +,31,Area Harvested,2005,Ha,11496.00000,A
    Argentina,31,Area Harvested,2005,Ha,2200.00000,F
    Armenia,31,Area Harvested,2005,Ha,5300.00000,
    Asia +,31,Area Harvested,2005,Ha,272644.00000,A
    

    可以看出,这是按字母顺序排列在第一列上的。

    我想把这个 sort 以便我可以根据 第6个数字逗号分隔列 .

    我尝试了:

    grep -i "area harvested.*2005" ps1_apricot_countries_2005.csv | sed 's/\"//g' | sort -k6rn
    

    然而,这导致了以下结果(前7项记录仅作为示例显示):

    Afghanistan,31,Area Harvested,2005,Ha,5200.00000,F
    Africa +,31,Area Harvested,2005,Ha,59536.00000,A
    Albania,31,Area Harvested,2005,Ha,400.00000,F
    Algeria,31,Area Harvested,2005,Ha,22888.00000,
    Americas +,31,Area Harvested,2005,Ha,11496.00000,A
    Argentina,31,Area Harvested,2005,Ha,2200.00000,F
    Armenia,31,Area Harvested,2005,Ha,5300.00000,
    

    它似乎仍然按降序排列在第一列,而不是第六列。有人能解释一下如何纠正上述方法来实现这一点吗?

    1 回复  |  直到 9 年前
        1
  •  9
  •   anubhava    9 年前

    您可以使用以下排序:

    sort -t, -rnk6
    

    按第6个数字字段降序排序,以分隔 , .

    • -t, 用来告诉 sort 这些字段由逗号分隔。
    • -rnk6 用于对字段6按相反的数字顺序排序

    这将给出以下输出:

    Asia +,31,Area Harvested,2005,Ha,272644.00000,A
    Africa +,31,Area Harvested,2005,Ha,59536.00000,A
    Algeria,31,Area Harvested,2005,Ha,22888.00000,
    Americas +,31,Area Harvested,2005,Ha,11496.00000,A
    Armenia,31,Area Harvested,2005,Ha,5300.00000,
    Afghanistan,31,Area Harvested,2005,Ha,5200.00000,F
    Argentina,31,Area Harvested,2005,Ha,2200.00000,F
    Albania,31,Area Harvested,2005,Ha,400.00000,F