查看文件时按正则表达式排序

查看文件时按正则表达式排序

我有一个正在尝试解析的文本文件:

176.9.x.xx - MISS [07/Aug/2017:13:03:59 -0400]  foo.org "GET /foo/bar?page=7 HTTP/1.1" 200 17441 "-" "Mozilla/5.0 (compatible; MegaIndex.ru/2.0; +http://megaindex.com/crawler)" u:192.168.x.x:80 t:0.002

我真的想按值排序t:0.002。 (并非所有值都是 0.002,但我正在尝试按数字方式对该字段进行排序)。现在,在一堆这样的条目中,我得到“t:-”(我使用 grep -v 来忽略它)。

我知道我可以使用排序,但这就是我陷入困境的地方:

cat test.txt | grep -v "t:-" | sort -n 

我似乎无法让它按值“t:”排序。我确定我需要在排序命令中添加更多内容,但我不确定是什么。有什么建议么?

答案1

如果您的“t”字段始终是最后一个更可靠,您可以使用施瓦茨变换of:装饰、排序、取消装饰:

awk '{print substr($NF, 3), $0}' input | sort -n | cut -d ' ' -f2-

在这里,awk 打印最后一个字段,去掉其前导“t:”文本; sort 然后有一个很好的数值作为排序依据,然后我们去掉第一个字段。

相关内容