利用sort对多字段排序
線上直播環(huán)境中需要從nginx訪問日志中分析每個client在一個小時內(nèi)的訪問情況,需要使用sort對多重字段進行排序。
sort基礎(chǔ)知識回顧
下面是需要用到的sort的知識點:
sort語法
[root@www ~]# sort [-fbMnrtuk] [file or stdin]
選項與參數(shù):
-f :忽略大小寫的差異,例如 A 與 a 視為編碼相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
-n :使用『純數(shù)字』進行排序(默認是以文字型態(tài)來排序的);
-r :反向排序;
-u :就是 uniq ,相同的數(shù)據(jù)中,僅出現(xiàn)一行代表;
-t :分隔符,默認是用 [tab] 鍵來分隔;
-k :以那個區(qū)間 (field) 來進行排序的意思(其中,用來指明選定域的結(jié)束位置,默認到行尾)
其中我們需要知道-k這個選項。
我們先看一個簡單的例子:
對使用冒號分隔的第三項(到末尾)進行排序(department_id),并去掉重復(fù)項
$?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
下面對指定字段的多重排序問題再做強調(diào):
sort?sort_demo.txt?-k1,1?-k2n,2這里先按第2列排序,再按照第1列排序。注意, 這里按第一列排序應(yīng)該寫成-k1,1而不能是-k1
業(yè)務(wù)日志分析 下面是分析日志,檢查那些response body響應(yīng)時間過長的日志,排查client端網(wǎng)絡(luò)較慢的原因: zcat /usr/local/cloud/access_201609190000.tar.gz | grep -a "mltag=6003" | awk '$9>100000&&$10!=0&&$9/$10<400000{print $3,$2,$8,$9,$10,$9/$10,$(NF-6),$(NF-5),$(NF-4),$(NF-2),$(NF-1),$NF}' | column -t | sort -k2,2 -k1,1 表示先以第二列排序后,再按照第一列排序
通過上面的多重排序輸出,我們可以很清楚地分析某個client ip在一小時內(nèi)所有請求的響應(yīng)時間,如果都比較長,說明該client所在的網(wǎng)絡(luò)環(huán)境不太好。
總結(jié)
以上是生活随笔為你收集整理的利用sort对多字段排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu 14.04.5 64bi
- 下一篇: Windows 10完美识别3TB硬盘实