Shell程式設計四劍客之AWK

2021-08-28 07:26:45 字數 3068 閱讀 4281

awk是乙個優良的文字處理工具,linux

及unix

環境中現有的功能最強大的資料處理引擎之一,以aho、weinberger、kernighan三位發明者名字首字母命名為awk,awk是乙個行級文字高效處理工具,awk經過改進生成的新的版本有nawk、gawk,一般linux預設為gawk,gawk是 awk的gnu開源免費版本。

awk基本原理是逐行處理檔案中的資料,查詢與命令列中所給定內容相匹配的模式,如果發現匹配內容,則進行下乙個程式設計步驟,如果找不到匹配內容,則繼續處理下一行。其語法引數格式為,awk常用引數、變數、函式詳解如下:

awk    'pattern   +   '     file

awk基本語法引數詳解:

單引號' '是為了和shell命令區分開;

大括號表示乙個命令分組;

pattern是乙個過濾器,表示匹配pattern條件的行才進行action處理;

action是處理動作,常見動作為print;

使用#作為注釋,pattern和action可以只有其一,但不能兩者都沒有。

awk內建變數詳解:

fs 分隔符,預設是空格;

ofs 輸出分隔符;

nr 當前行數,從1開始;

nf 當前記錄字段個數;

$0 當前記錄;

$1~$n 當前記錄第n個字段(列)。

awk內建函式詳解:

gsub(r,s):在$0中用s代替r;

index(s,t):返回s中t的第乙個位置;

length(s):s的長度;

match(s,r):s是否匹配r;

split(s,a,fs):在fs上將s分成序列a;

substr(s,p):返回s從p開始的子串。

awk常用操作符,運算子及判斷符:

++ --                           增加與減少( 前置或後置);

^ **                            指數( 右結合性);

! + -                            非、一元(unary) 加號、一元減號;

+ - * / %                      加、減、乘、除、餘數;

< <= == != > >=                       數字比較;

&&                            邏輯and;

||                                 邏輯or;

= += -= *= /= %= ^= **=           賦值。

awk與流程控制語句:

if(condition) else ;

while ;

dowhile(condition);

for(init;condition;step);

break/continue。

常用awk工具企業演練案列:

awk列印硬碟裝置名稱,預設以空格為分割:

df    -h|awk  ''

awk以空格、冒號、\t、分號為分割:

awk  -f '[ :\t;]'  ''            jfedu.txt

awk以冒號分割,列印第一列,同時將內容追加到/tmp/awk.log下:

awk  -f:  ''  jfedu.txt

列印jfedu.txt檔案中的第3行至第5行,nr表示列印行,$0表示文字所有域:

awk 'nr==3,nr==5  '             jfedu.txt

awk 'nr==3,nr==5  '          jfedu.txt

列印jfedu.txt檔案中的第3行至第5行的第一列與最後一列:

awk 'nr==3,nr==5 '       jfedu.txt

列印jfedu.txt檔案中,長度大於80的行號:

awk   'length($0)>80 '        jfedu.txt

awk引用shell變數,使用-v或者雙引號+單引號即可:

awk -v str=hello  ''      jfedu.txt

str="hello";echo| awk  ''";}'

awk以冒號切割,列印第一列同時只顯示前5行:

cat  /etc/passwd|head -5|awk  -f:   ''

awk  -f:  'nr>=1&&nr<=5  '  /etc/passwd

awk指定檔案jfedu.txt第一列的總和:

cat jfedu.txt |awk 'end'

awk  -f:  'nr%2==0 '  /etc/passwd

awk新增自定義字元:

ifconfig  eth0|grep "bcast"|awk ''

awk格式化輸出passwd內容,printf列印字串,%格式化輸出分隔符,s表示字串型別,-12表示12個字元,-6表示6個字元:

awk -f:  ''  /etc/passwd

awk ofs輸出格式化\t:

netstat -an|awk '$6 ~ /listen/&&nr>=1&&nr<=10 ' ofs="\t" 

awk與if組合實戰,判斷數字比較:

echo 3 2 1 | awk ' else }'

awk與陣列組合實戰,統計passwd檔案使用者數:

awk -f ':' 'begin ; end'  /etc/passwd

awk分析nginx訪問日誌的狀態碼404、502等錯誤資訊頁面,統計次數大於20的ip位址。

awk '' access.log|sort|uniq –c|sort –nr | awk ''

用/etc/shadow檔案中的密文部分替換/etc/passwd中的"x"位置,生成新的/tmp/passwd檔案。

awk 'begin nr==fnrnr>fnr' /etc/shadow /etc/passwd

awk統計伺服器狀態連線數:

netstat -an | awk '/tcp/ end }'

netstat -an | awk '/tcp/ ' | sort | uniq -c

shell四劍客之awk

awk是乙個行級文字處理工具,基本原理是逐行處理檔案中的資料,查詢與命令列中所給定內容進行匹配,如果發現匹配內容,則進行下乙個程式設計步驟,如果找不到匹配內容,則繼續處理下一行。awk經過改進生成新的版本有nawk gawk,一般linux預設為 語法格式如下 awk pattern filenam...

shell程式設計三劍客之awk

四 awk使用高階 awk是一種程式語言,主要用於在linux unix下對文字和資料進行處理,是linux unix下的乙個工具。資料可以來自標準輸入 乙個或多個檔案,或其它命令的輸出。awk的處理文字和資料的方式 逐行掃瞄檔案,預設從第一行到最後一行,尋找匹配的特定模式的行,並在這些行上進行你想...

Shell 程式設計四劍客之 Find

通過如上基礎語法的學習,讀者對 shell 程式設計有了更近一步的理解,shell 程式設計不再是簡單命令的堆積,而是演變成了各種特殊的語句 各種語法 程式設計工具 各種命令的集合。在 shell 程式設計工具中,四劍客工具的使用更加的廣泛,shell 程式設計四劍客包括 find sed grep...