我有一組負載平衡器的日志檔案,我想得到一個串列,其中包含計數https代碼的總數。為了做到這一點,我使用了下面的一組命令,但我沒有得到一個適當的輸出。誰能幫幫我,讓我知道問題出在哪里?
cat `ls -rt SampleFile.log||tail -1|head -1`!
|awk '{print 4,$7,$8,$9,$10}'/span>
|cut -c2-
|awk '{print 1" "3}' FS='"
|awk '{print 1,2": "3,4}' FS=" :" OFS=" "
|awk '{print 1,2,4}'
|sed 's/Jan/01 /;s/Feb/02 /;s/Mar/03 /;s/Apr/04 /;s/May/05 /。 s/Jun/ 06 /;s/Jul/ 07 /;s/Aug/ 08 /;s/Sep/ 09 /;s/Oct/ 10 /;s/Nov/ 11 /;s/Dec/ 12 /'/span>
|awk '{print 3,2,1,4,5}'
|排序
|uniq -c
|awk 'BEGIN { FS=" " }{print 4". "3". "2" "5", "6", "1}'
|gawk 'BEGIN{FS=","} {ln[1]; hd[2]; mx[1,2]=$3}。END { printf "%s", "
時間戳"; for (i in HD) printf " | %s", i; print ""; for (j in LN) { printf "%s",j; for (i in HD) { if (MX[j,i] =="") { printf " | ]", 0 } else { printf " | ]", MX[j,i] } } print "" } }'
|sort
SampleFile.log
10.99.2.216 - - [06/Sep/2021:19:00:00 0200] "GET /mceapp/customer/subscriptions/1053995219/accounts;filter=all; scope=node HTTP/1.1" 200 1136 dCvQi12Mt20000000 delxvi13.de.pri.o2.com:36093 10.99.2.216 - - [06/Sep/2021:19:00:00 0200] "PUT /api/emailverification/tokens/d11111d2-278a-4fed-ae57-9f50bf277025/emails HTTP/1.1" 200 78 gY4NZ1BMv20000000 delxvi18.de.pri.o2.com:36090 10.99.2.216 - - [06/Sep/2021:19:00:00 0200] "GET /mceapp/prepaid/inlife/brands/77/prepaidsubscriptions/mobile/4915733639572/possibleproducts HTTP/1.1" 200 10877 dCvQi13Mt20000000 delxvi08.de.pri.o2.com:36091
預期輸出(樣本)。(它應該以 https 回應總數的形式給出輸出。)
如果我使用下面這組日志檔案,同樣的命令可以正常作業,沒有任何問題。 SampleLog_2.log:
10.99.2.216 - - [27/Jun/2021:16:00:00 0200] [105000] "GET /mceapp/contractextension/subscriptions/1151976376/contractextensioneligibility HTTP/1.1" 200 943 03eEr11g400000000 delxvi38.de.pri.o2.com:10582 10.99.2.216 - - [27/Jun/2021:16:00:00 0200] [280000] "GET /mceapp/invoice/xstack/accounts/6046093360/invoiceoverview HTTP/1.1" 200 18589 uCWE718c400000000 delxvi12.de.pri.o2.com:36094 10.99.2.216 - - [27/Jun/2021:16:00:00 0200] [408000] "GET /mceapp/invoice/xstack/accounts/6046093360/invoice/documents HTTP/1.1" 200 5962 GrDqn1Jf400000000 delxvi11.de.pri.o2.com:36094
這兩個樣本檔案有什么不同,我需要改變什么命令來獲得預期的輸出。
uj5u.com熱心網友回復:
從你的日志檔案中剪切另一組塊是非常容易的。使用下面的命令,它將完成你所要求的任務。
cat `ls -rt access-duration.log||tail -1|head -1`|awk '{print
4,6,7,8,9}'|cut -c2-|awk '{print 1" "3}' FS='"'|awk '{print
1,2": "3,4}' FS=":" OFS="" |awk '{print 1,2,4}'|sed 's/Jan//
01 /;s/Feb/02 /;s/Mar/03 /;s/Apr/04 /;s/May/05
/06 /;s/Jun/ 06 /;s/Jul/ 07 /;s/Aug/ 08 /;s/Sep/ 09
/;s/Oct/ 10 /;s/Nov/ 11 /;s/Dec/ 12 /'|awk '{列印
3,2,1,4,5}'|sort|uniq -c|awk 'BEGIN { FS=" " }{print 4". "3". "2"
"$5","$6","$1}'|gawk 'BEGIN{FS=","} {ln[1]; hd[2]; mx[1,2]=$3}。結束
{ printf "%s","
時間戳"; for (i in HD) printf "| |
%s", i; print ""; for (j in LN) {printf "%s",j; for (i in HD) { if
(MX[j,i] =="") { printf " | ]",0 } else { printf " | ]", MX[j,i] }
} print "" } }' |sort
我只在下面一行做了修改,在4美元后面用-1替換了。 '{print 4,$6,$7,$8,$9},然后就成功了。
uj5u.com熱心網友回復:
這兩個樣本檔案有什么不同?
區別在于SampleLog_2.log中時間戳之后的額外括號列。
以及我需要改變什么命令來獲得預期的輸出。
為了減少對不需要的列的依賴,你可以例如替換管道
cat `ls -rt SampleFile.log||tail -1|head -1`。
|awk '{print 4,$7,$8,$9,$10}'
|cut -c2-
|awk '{print 1" "3}' FS='"'
|awk '{print 1,2": "3,4}' FS=":" OFS=" "
|awk '{列印1,2,4}'
與
sed 's?.*(.../.../....):(...:...): . .*" (...).*?1 2 3?' SampleFile.log
在以下階段可能還有進一步簡化的空間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/333014.html
標籤:
