awk打印指定列以后的所有內容


今天在分析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步完成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM