这可能是重复的,但我有一个制表符分隔的文件,我需要根据第二列(浮点值)对文件进行排序。
sort -s -k2,2gr -t$'\t'
该代码声明它仅基于制表符分隔文件的相反顺序的第二列进行排序。但我得到了错误的答案。
答案1
经检查,我的使用建议-n
是正确的:
$ for i in {1..10}; do printf "%s\t%s\t%s\n" $RANDOM $(python3 -c "print($RANDOM / $RANDOM)") $RANDOM; done | sort -n -t' ' -k2
29712 0.03716599507061539 950
2107 0.08032908116102791 1738
27575 0.37469985135495676 9831
16029 0.6201534733441034 18426
10659 0.7227198549410698 19929
1175 0.8913083459006143 24232
27187 1.1602447494625434 7016
6047 1.6342058354442255 17419
25561 2.026578073089701 4270
21636 14.603404255319148 17159
示例数据可以很好地使用-n
:
$ sort -n -t$'\t' -k2 test.txt -r | column -t -s$'\t'
Austin, Texas 50.2 68.3 84.2 70.6 33.65 85 0.9 62/58
Baton Rouge, La. 50.1 66.6 81.7 68.1 63.08 110 0.2 52/46
Atlanta, Ga. 42.7 61.6 80.0 62.8 50.20 115 2.1 69/65
Birmingham, Ala. 42.6 61.3 80.2 62.9 53.99 117 1.5 60
Asheville, N.C. 35.8 54.1 73.0 55.2 47.07 126 15.3 39
Albuquerque, N.M. 35.7 55.6 78.5 57.3 9.47 60 11.0 64
Baltimore, Md. 32.3 53.2 76.5 55.4 41.94 115 21.5 53
Atlantic City, N.J. 32.1 50.6 75.3 55.1 40.59 113 16.2 60/54
Boise, Idaho 30.2 50.6 74.7 52.8 12.19 89 20.6 64
Bridgeport, Conn. 29.9 48.9 74.0 54.7 44.15 119 26.2 55/49
Boston, Mass. 29.3 48.3 73.9 54.1 42.53 127 42.8 52/66
Billings, Mont. 24.0 46.1 72.0 48.1 14.77 96 56.9 69
Albany, N.Y. 22.2 46.6 71.1 49.3 38.60 136 64.4 57
Anchorage, Alaska 15.8 36.3 58.4 34.1 16.08 115 70.8 39/60
Bismarck, N.D. 10.2 43.3 70.4 45.2 16.84 96 44.3 64
通过仅在一个字段上指定排序顺序,如果排序字段有平局,则可能会出现问题。