排序第n列bash问题

时间:2015-09-04 06:00:45

标签: bash sorting

我正在运行以下命令来处理一些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 个答案:

答案 0 :(得分:6)

您可以使用以下类别:

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