我正在运行以下命令来处理一些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)
它似乎仍然按降序排列在第一列而不是第六列.任何人都可以解释如何纠正上述方法来实现这一目标吗?
你可以使用这种方式:
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)