我們在面試中經常被問到的linux命令 就都會包括awk命令的使用,下面我向大家總結awk命令的詳細使用。希望能給大家一些幫助。
在國內很多大型公司面試後台程式設計師的時候無一例外都會問到下面這個題目
「請統計某個apache或者nginx 內的log檔案,並求出裡面ip數的top10」
當然,這個問題不僅僅可以用awk來回答,當然可以用基本的grep這個命令來回答。
我先給出這個題目最基本的解決答案:
假設這個就是apache 的access_log 檔案(由於這個只是單機的apache 所以所有記錄都是127.0.0.1,但是不妨礙學習這個問題的答案)
awk '' access_log | sort | uniq -c | head -n 10
截圖如下
這樣就能夠求出ip數的top10了
接下來我們好好學習 awk 這個命令的使用規範:
盜用網上的資料 如下所示
比如有這個檔案awk.txt 裡面內容如下:
2 this is a test
3 are you like awk
this's a test
對照這個檔案我們一起學習 awk 這個命令的使用:
example 1
awk
' ' awk.txt =>>> 輸出每行第乙個跟第四個(根據空格根tab鍵隔開)
結果如下:
a a
3 like
this』s
10 orange
example 2
awk
' ' awk.txt =>> 格式化輸出第1,2 項
結果如下:
' ' awk.txt =>>> 對第一行到第四行進行用h字元分割
結果如下:
awk -v a=1 -v b=2 '' awk.txt =>>>設定a,b兩個變數,但是注意 在print 中 無法使用 $a $b這樣的變數 只能對結果進行變數替換
結果如下:
' awk.txt =>>>在pattern前可以加上c語言判斷
結果如下:
=、~匹配正規表示式、!~不匹配正規表示式
至此,大家肯定對awk這個命令多少有些了解了吧 。其實最後匹配ip的正則並不是最正確的。因為每個ip段都是小於255的。所以要是嚴格匹配的話 就非常的複雜了。大家可以看這邊部落格的介紹,就詳細介紹了正則匹配ip位址的方法
希望大家喜歡我這次部落格內容,謝謝!
另註:
linux 下匹配數字 :
貌似用\d是不行的,linux裡建議使用 [0-9] 或者更符合
posix標準的 [[:digit:]]
例如:echo 123abc | grep "^[0-9]" 或
echo 123abc | grep "^[[:digit:]]"
LInux 命令awk學習
一 實現的功能 現有倆個檔案a.txt 裡邊有倆列資料 bid,name b.txt 好幾列資料 bid,pv 其中a.txt有3800w的資料量,b.txt有1300w的資料量,而且a.txt的資料報含b.txt的資料,要將b.txt的資料在a.txt裡邊刪除掉,並且還要給b.txt的bid 對應...
linux命令學習 awk 命令學習
三 awk 指令碼 四 awk 程式設計 五 寫在結尾 awk是linux上一款強大的文字分析工具,它可以將檔案逐行的讀入,然後用分割符分割開來,再對分割的各個部分進行處理。awk分割的各個部分叫做域,預設的分割符是空格和製表符。可以通過 f來指定分割符。awk有3個不同版本 awk nawk和ga...
Linux命令之awk學習筆記
一 awk命令 root www awk 條件型別 1 條件型別 2 filename二 awk 後面接兩個單引號並加上大括號 來設定想要對資料進行的處理動作。在每一行的每個欄位都是有變數名稱的,那就是 1,2.等變數名稱。0代表 一整列資料 的意思 如圖 以上面的例子來說,第一行的 0 代表的就是...