本文共 1286 字,大约阅读时间需要 4 分钟。
线上直播环境中需要从nginx访问日志中分析每个client在一个小时内的访问情况,需要使用sort对多重字段进行排序。
sort基础知识回顾
下面是需要用到的sort的知识点:
sort语法
[root@www ~]# sort [-fbMnrtuk] [file or stdin] 选项与参数: -f :忽略大小写的差异,例如 A 与 a 视为编码相同; -b :忽略最前面的空格符部分; -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法; -n :使用『纯数字』进行排序(默认是以文字型态来排序的); -r :反向排序; -u :就是 uniq ,相同的数据中,仅出现一行代表; -t :分隔符,默认是用 [tab] 键来分隔; -k :以那个区间 (field) 来进行排序的意思(其中,用来指明选定域的结束位置,默认到行尾)其中我们需要知道-k这个选项。
我们先看一个简单的例子:
对使用冒号分隔的第三项(到末尾)进行排序(department_id),并去掉重复项
$ sort -t: -u -k 3 names.txt
Emma Thomas:100:Marketing Madison Randy:300:Product Development Alex Jason:200:Sales Sanjay Gupta:400:Support如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。
cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r sync:x:4:65534:sync:/bin:/bin/sync proxy:x:13:13:proxy:/bin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh下面对指定字段的多重排序问题再做强调:
通过上面的多重排序输出,我们可以很清楚地分析某个client ip在一小时内所有请求的响应时间,如果都比较长,说明该client所在的网络环境不太好。