排序第n列bash问题

use*_*531 3 sorting bash

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

grep -i "area harvested.*2005" ps1_apricot_countries_2005.csv | sed 's/\"//g'
Run Code Online (Sandbox Code Playgroud)

这导致以下输出(前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
Run Code Online (Sandbox Code Playgroud)

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

我试图将其管道化,sort以便我可以根据第6个数字逗号分隔列按降序对上述数据进行排序.

我试过了:

grep -i "area harvested.*2005" ps1_apricot_countries_2005.csv | sed 's/\"//g' | sort -k6rn
Run Code Online (Sandbox Code Playgroud)

然而,这导致以下结果(前七条记录仅作为样本显示):

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,
Run Code Online (Sandbox Code Playgroud)

它似乎仍然按降序排列在第一列而不是第六列.任何人都可以解释如何纠正上述方法来实现这一目标吗?

anu*_*ava 7

你可以使用这种方式:

sort -t, -rnk6
Run Code Online (Sandbox Code Playgroud)

排序第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
Run Code Online (Sandbox Code Playgroud)