根据制表符间隔文件中的第二列对文件进行排序

根据制表符间隔文件中的第二列对文件进行排序

这可能是重复的,但我有一个制表符分隔的文件,我需要根据第二列(浮点值)对文件进行排序。

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

通过仅在一个字段上指定排序顺序,如果排序字段有平局,则可能会出现问题。

相关内容