日誌分析,資料統計,命令結果過濾。。。等等情況下,awk絕對是運維人的好幫手,它能讓你在龐大而又有規律的資料中過濾、統計出你想要的資料,熟練運用awk,你的工作效率一定會有很大的提公升
awk [-f分隔符] [-v 變數=值] 『begin end 』 file1 file2 ···
-f:指定分割符,預設空格(如 -f"," 以逗號分割)
-v:定義乙個變數,如 last -n 2 | awk -v a=1 ''
$0:當前讀取的整行資料
$1~$n:按照分割符分割之後第一列資料,第二列等依次類推
nf:每行被分割之後的字段數量
nr:awk讀取的行數
fnr:當前讀取的記錄數,不同於nr,因為當awk讀取第二個檔案的時候,fnr就會從0開始,但是nr會繼續遞增
rs:輸入檔案的行分隔符,預設是換行符
fs:分割字元 預設是空格和tab
end:讀完所有資料後執行
begin:在讀取資料之前執行
想過去最近兩條登陸資訊 只需要把使用者和ip列印出來,且只列印root使用者的資訊
可以這樣執行:last -n 2 | awk '$1=="root"'
命令的整個處理流程如下:
1.讀入第一行,並將第一行的資料填入$0,$1,$2等變數中
2.依據條件型別的限制,判斷是否需要進行後面的動作
3.做完所有的動作與條件型別
4.若還有後續的行,重複以上動作,直到所有資料讀取完畢
awk 'beginend'
#!/bin/awk -f
#執行前
begin
#執行中
#執行後
end
awk 'begin'
gsub(全域性替換):
gsub("舊", "新", $0)【將當前行所有的"舊"替換成"新"】
sub(一次替換,替換第一次匹配的):
sub("舊", "新", $0)【將當前行第乙個"舊"替換成"新"】
substr(擷取字串):
substr($0, 1, 5)【擷取當前行行下標為1開始,長度為5的字串(下標從1開始)】
index(匹配查詢子字串):
index(str, subs)【判斷str字串張是否包含subs字串,如果包含,返回subs的下標位置(下標從1開始計算)。如果不包含,則返回0】
length(字串長度):
length(str)【返回字串長度】
tolower(將字串都變為小寫):
tolower(str)
toupper(將字串都變為大寫):
toupper(str)
split(分割字串,儲存為陣列):
split(str, arr, ",")【將str用,分割,儲存成屬組arr】
a.acc日誌格式如下:
訪問日誌還有很多中情況的分析可以用到awk,例如找分析指定時間段內的訪問情況,指定介面的訪問情況等等
ls -l|awk 'nr!=1 && !/^d/ end'
(!/^d/剔除了以d開頭的行,也就是不計算目錄)
Linux高階運維命令(awk)
awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。awk有3個不同版本 awk nawk和gawk,未作特別說明,一般指gawk,gawk...
Linux運維 AWK介紹
將 awk script 放入指令碼檔案並以 bin awk f作為首行,給予該指令碼可執行許可權,然後在 shell 下通過鍵入該指令碼的指令碼名呼叫之。將所有的 awk script 插入乙個單獨指令碼檔案,然後呼叫 awk f wak 指令碼檔案 input file s awk 的執行過程 ...
Linux 基本運維命令之 head
head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾。1 命令格式 head 引數 檔案 2 命令功能 head 用來顯示檔案的開頭至標準輸出中,預設head命令列印其相應檔案的...