Linux shell - 按数字列排序

Linux shell - 按数字列排序

我在 jupyter 笔记本中使用 linux shell。我试图过滤 .csv 文件的行,只保留包含“政府教育支出,总额(占 GDP 的百分比)”的行,然后只保留第 1 列和第 64 列,最后根据第 64 列(数字)进行排序。

grep 'Government expenditure on education, total (% of GDP)'  WDIData.csv | cut -d ',' -f 1,64 | sort -t "," -k64n

但是,它仍然根据第 1 列按字母顺序进行排序:

"Afghanistan","3.19979000091553"
"Africa Eastern and Southern","4.95163488388062"
"Africa Western and Central","3.0132200717926"
"Albania",""
"Algeria","5.8663501739502"
"American Samoa",""
"Andorra","3.2467200756073"
"Angola","2.04470133781433"
"Antigua and Barbuda","2.64407563209534"
"Arab World",""
"Argentina","4.87773990631104"

我究竟做错了什么?

答案1

至少有两点是错误的,也许有三点:

  1. sort从中获得输出cut,并且此输出仅有的. 输出中cut -d ',' -f 1,64字段。

  2. "3.19979000091553"并且类似的字符串无法像您期望的那样按数字排序,因为前导"

    如果始终将其"作为第二个(最初是第 64 个)字段的第一个字符,那么-k2.2n应该可以工作。

  3. 您的语言环境(您未透露)可能会或可能不会识别.小数分隔符。如有疑问,请使用LC_ALL=C

    … | LC_ALL=C sort -t , -k2.2n
    

相关内容