今天在分析tomcat日志文件時,遇到一個問題,想統計外面用戶的user agent信息,因此就只需要過濾出第12列之后的所有內容。
那么對於這個需求,我們到底該怎么處理呢,由於我沒有想到一個一步到位的方法,因此找到了一個取巧的方法,將其過程分成兩步:
1、使用awk將文件的前12列替換為空。
awk '{for(i=1;i<=12;i++)$i="";print $0}' localhost_access_log.2015-01-03.txt //寫法一 awk '{for(i=1;i<=12;i++){$i=""};print $0}' localhost_access_log.2015-01-03.txt //寫法二 awk '{for(i=13;i<=NF;i++)printf $i" ";printf "\n"}' localhost_access_log.2015-01-03.txt //寫法三
執行完以上腳本后,每一行的前面都將有12個空格字符,如下圖所示:
2、第二步我們就只需要處理每行前面的12個空格即可,假設我們已經將上面的結果重定向到了5201351.txt文件,這時我們再使用sed命令。
[root@5201351 ~]# sed 's/^ *//' 5201351.txt //這樣只能匹配空格開頭 [root@5201351 ~]# sed 's/^\s*//' 5201351.txt //也可以這樣寫,除了空格還可以匹配制表符 [root@5201351 ~]# sed 's/^[[:space:]]*//' 5201351.txt //也可以這樣寫,除了空格還可以匹配制表符
這樣我們就完美的解決了我們的需求,只過濾出日志文件第12列以后所有的內容。
總結:在工作中很多時候也是這樣、一個問題如果卡久了,我們也可以將問題化成2步、甚至3步完成。