此问题现已得到解答-滚动至帖子末尾以寻求解决方法。
很抱歉,如果答案已经在这里,但是到目前为止我找到的所有答案都建议使用-h标志或-n标志,而这些都不对我有用...
我从curl命令获得了一些输出,这些输出给了我几列数据。这些列之一是人类可读的文件大小(“ 1.6mb”,“ 4.3gb”等)。
我正在使用unix sort 命令按相关列进行排序,但是它似乎正在尝试按字母顺序而不是数字顺序进行排序。我曾尝试同时使用-n和-h标志,但是尽管它们确实改变了顺序,但在两种情况下,顺序在数字上都不正确。
我在CentOS Linux机器上,版本为7.2.1511。我拥有的 sort 版本是“ sort(GNU coreutils)8.22”。
我尝试以以下不同格式使用-h标志:
curl localhost:9200/_cat/indices | sort -k9,9h | head -n5
curl localhost:9200/_cat/indices | sort -k9 -h | head -n5
curl localhost:9200/_cat/indices | sort -k 9 -h | head -n5
curl localhost:9200/_cat/indices | sort -k9h | head -n5
我总是得到以下结果:
green open indexA 5 1 0 0 1.5kb 800b
green open indexB 5 1 9823178 2268791 152.9gb 76.4gb
green open indexC 5 1 35998 7106 364.9mb 182.4mb
green open indexD 5 1 108 11 387.1kb 193.5kb
green open indexE 5 1 0 0 1.5kb 800b
我尝试使用-n标志,格式与上述相同:
curl localhost:9200/_cat/indices | sort -k9,9n | head -n5
curl localhost:9200/_cat/indices | sort -k9 -n | head -n5
curl localhost:9200/_cat/indices | sort -k 9 -n | head -n5
curl localhost:9200/_cat/indices | sort -k9n | head -n5
我总是得到以下结果:
green open index1 5 1 1021 0 3.2mb 1.6mb
green open index2 5 1 8833 0 4.1mb 2mb
green open index3 5 1 4500 0 5mb 2.5mb
green open index4 1 0 3 0 3.9kb 3.9kb
green open index5 3 1 2516794 0 8.6gb 4.3gb
编辑:原来有两个问题:
1)排序期望看到大写的单个字母-M,K和G,而不是mb,kb和gb(对于字节,您可以保留空白)。
2)排序将包含前导空格,除非您明确排除它们,否则会影响顺序。
解决方案是用大写字母替换小写字母,并使用-b标志使排序忽略前导空格(我将此答案基于@Vinicius的以下解决方案,因为如果您不知道,它更容易阅读正则表达式):
curl localhost:9200/_cat/indices | tr '[kmg]b' '[KMG] ' | sort -k9hb
答案 0 :(得分:2)
您的'm'和'g'单位应为大写。 GNU sort
manual读为:
-h --human-numeric-sort --sort = human-numeric
按数字顺序排列,首先按数字符号(负,零或正)排序;然后以SI后缀(该顺序为空,或者为“ k”或“ K”,或者为“ MGTPEZY”之一;请参见块大小);最后是数值。
您可以使用GNU curl
来更改sed
的输出,如下所示:
curl localhost:9200/_cat/indices \
| sed 's/[0-9][mgtpezy]/\U&/g'
| sort -k9,9h \
| head -n5
收益:
green open index4 1 0 3 0 3.9kb 3.9kb
green open index1 5 1 1021 0 3.2Mb 1.6Mb
green open index2 5 1 8833 0 4.1Mb 2Mb
green open index3 5 1 4500 0 5Mb 2.5Mb
green open index5 3 1 2516794 0 8.6Gb 4.3Gb
其他字母(如“ b”)将被视为“无单位”:
green open indexA 5 1 0 0 1.5kb 800b
green open indexE 5 1 0 0 1.5kb 800b
green open indexD 5 1 108 11 387.1kb 193.5kb
green open indexC 5 1 35998 7106 364.9Mb 182.4Mb
green open indexB 5 1 9823178 2268791 152.9Gb 76.4Gb
如果需要的话,可以通过管道传递到sed 's/[0-9][MGTPEZY]/\L&/g'
答案 1 :(得分:1)
sort
不理解kb,mb和gb。您必须使用K,M和G。您可以使用tr
来转换后缀:
curl localhost:9200/_cat/indices | tr 'kmgb' 'KMG ' | sort -b -k 9 -h