我在 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
至少有两点是错误的,也许有三点:
您
sort
从中获得输出cut
,并且此输出仅有的. 输出中cut -d ',' -f 1,64
有二字段。"3.19979000091553"
并且类似的字符串无法像您期望的那样按数字排序,因为前导"
。如果始终将其
"
作为第二个(最初是第 64 个)字段的第一个字符,那么-k2.2n
应该可以工作。您的语言环境(您未透露)可能会或可能不会识别
.
小数分隔符。如有疑问,请使用LC_ALL=C
:… | LC_ALL=C sort -t , -k2.2n