我有像这样的行
5.7015 40828240 +152 -> explode(string(1), string(21)) /f.inc:467
5.7020 40834040 +192 -> explode(string(1), string(21)) /f.inc:467
5.7020 40834088 +160 -> explode(string(1), string(21)) /f.inc:467
5.7023 40834392 +192 -> explode(string(1), string(21)) /f.inc:467
5.7027 40835000 +152 -> explode(string(1), string(21)) /f.inc:467
我想按列排序这样的输出,其中数字从加号开始(也正好在相同的列数中,有时可以从减号开始)。
所以我需要按第三列排序输出。我为此尝试了cut
,但我无法达到结果
答案 0 :(得分:3)
使用coreutils排序你可以这样做(使用通用数字排序顺序):
sort -k3,3g file
输出:
5.7015 40828240 +152 -> explode(string(1), string(21)) /f.inc:467
5.7027 40835000 +152 -> explode(string(1), string(21)) /f.inc:467
5.7020 40834088 +160 -> explode(string(1), string(21)) /f.inc:467
5.7020 40834040 +192 -> explode(string(1), string(21)) /f.inc:467
5.7023 40834392 +192 -> explode(string(1), string(21)) /f.inc:467
如果输入为listed by the OP,我认为需要一些预过滤才能加入相关的行,这与sed 'N; /\n *>=>/ s// >=>/; P; D'
的行相似。合在一起:
< 1.xt.txt sed 'N; /\n *>=>/ s// >=>/; P; D' | sort -k3,3g
输出:
TRACE START [2013-01-15 13:17:48]
0.0149 2268328 +0 -> realpath(string(36)) /htdocs/lib/functions.inc:2 >=> '/htdocs/lib'
0.0016 942488 +80 -> header(string(38)) /htdocs/scripts/univexport.php:8 >=> NULL
0.0016 941816 +160 -> error_reporting(long) /htdocs/scripts/univexport.php:4 >=> 22527
0.0016 942008 +192 -> set_time_limit(long) /htdocs/scripts/univexport.php:5 >=> TRUE
0.0148 2268328 +264 -> dirname(string(50)) /htdocs/lib/functions.inc:2 >=> '/htdocs/lib'
0.0016 942408 +400 -> ini_set(string(12), string(5)) /htdocs/scripts/univexport.php:6 >=> '-1'
0.0188 2651104 +382776 -> require_once(1/htdocs/lib/functions_common.inc) /htdocs/lib/functions.inc:2
0.0014 941656 +941656 -> {main}() /htdocs/scripts/univexport.php:0
0.0147 2268064 +1325576 -> include_once(/htdocs/lib/functions.inc) /htdocs/scripts/univexport.php:9
标题被排序到顶部,因为它被认为是一个字符串,一般的数字顺序决定了这样的顺序(来自GNU排序手册):
不以数字开头的行(均被视为相等)。
NaNs(IEEE浮点运算中的“非数字”值),且顺序一致但依赖于机器。
减无限。
以数字升序排列的有限数字(-0和+0相等)。
加上无限。
答案 1 :(得分:3)
可以告诉sort使用-k标志对特定列进行排序。
sort -g -k3 file
将对第三列进行排序。 -t可以更改默认为空格的字段分隔符
编辑:
添加了-g选项,强制排序使用常规数字排序
答案 2 :(得分:0)
awk '{print $3}' file| sed s'/+//'
答案 3 :(得分:0)
我假设您获得了'data.txt'中的数据。
然后只需使用
sort +2 -n data.txt
这将从第3列开始对文件进行排序。