linux命令 awk(運維基本功)

2021-10-07 17:24:57 字數 2169 閱讀 1959

日誌分析,資料統計,命令結果過濾。。。等等情況下,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命令列印其相應檔案的...