awk是乙個行級文字處理工具,基本原理是逐行處理檔案中的資料,查詢與命令列中所給定內容進行匹配,如果發現匹配內容,則進行下乙個程式設計步驟,如果找不到匹配內容,則繼續處理下一行。
awk經過改進生成新的版本有nawk、gawk,一般linux預設為
語法格式如下:
awk 『pattern + 』 filename
1)awk引數詳解:
單引號『』是為了和shell命令分開
大括號{}表示乙個命令組
pattern是乙個過濾器,表示匹配pattern條件的行才進行action處理
action是處理動作,常見動作為print
2)awk內建變數詳解
fs:分隔符,預設是空格
ofs:輸出分割符
nr:當前行數,從1開始
nf:當前記錄字段數
$nf:最後乙個字段
$0:當前記錄
$1~$n:當前記錄第幾個字段(列)
3)awk內建函式
gsub(r,s):在$0中用s替換r ;awk 'gsub("root","--root--") ' /etc/passwd
index(s,t)返回s中第乙個t的位置 awk 'n=index("hello","e") ' /etc/passwd|head -n1 #2
length(s):s的長度
match(s,r):s是否匹配r
split(s,a,fs):用fs為分割符,將s分成序列 awk 'split($0,array,":") ' /etc/passwd|head -n1#/bin/bash
substr(s,p):返回s從p開始的子串
4)常用操作符、運算子、判斷符
++ --:增加與減少(前置或後置)
^**:指數,右結合性
!+-:非、元加號、一元減號
+ - * / %:加減乘除求餘
&&:邏輯與
||:邏輯或
= += -= *= /* %= ^= **=:賦值
5)流程控制語句
if(condition){}else{};
while{};
do{}while(condition);
for(init;condition;step){};
break/continue
實戰1)列印硬碟裝置名稱
df -h|awk ''
2)以空格、冒號、\t、分號為分隔符,cat -t filename檢視是否有\t(即符號^i)
awk -f '[ :\t;]' '" filename
3)以冒號分割,列印第一列,同時將內容追加到awk.log中
awk -f: '' /etc/passwd #awk.log必須加分號
awk -f: '' /etc/passwd >>awk.log
4)列印檔案中第三至第五行,nr表示列印行號,$0表示當前處理行
awk 'nr==3,nr==5 ' /etc/passwd
awk 'nr==3,nr==5 ' /etc/passwd
5)列印檔案中第3至第5行的行號、第一列和最後一列
awk 'nr>=3&&nr<=5 ' /etc/passwd
6)列印檔案中長度大於80的行號
awk 'length($0)>80' /etc/passwd
7)引用shell變數,使用-v或雙引號+單引號即可
awk -f: -v str=hello '' /etc/passwd
str="hello";echo |awk ''";}'#看不懂
8)以冒號切割,列印第一列同時只顯示前5行
awk -f: 'nr>=1&&nr<=5' /etc/passwd
head -n5 /etc/passwd|awk -f: ''
9)指定檔案第一列的總和
cat filename|awk 'end'
10)nr行號除以2餘數為0則跳過改行,繼續執行下一行
awk -f: '}' /etc/passwd
awk -f: 'nr%2==0 ' /etc/passwd
11)新增自定義字元
ifconfig eth0|grep netmask|awk ''
12)格式化輸出passwd內容,printf列印字串,%格式化輸出分隔符,s表示字元型別,-12表示左對齊占用12個字元
awk -f: '' /etc/passwd
13)ofs輸出格式化\t
awk -f: '' /etc/passwd
netstat -an|awk '$6 ~/listen/&&nr>=1&&nr<=10 ' #看不懂,指定第六欄位為listen?
14)if結構語句判斷大小
echo 3 2|awk ' else }'
15)使用陣列總計passwd檔案使用者數
awk -f: 'begin ;end' access.log|sort|uniq -c|sort -nr|awk ''#看不懂
grep -e (502|499|500|503|404)|awk ''|sort|uniq -c|sort -nr|awk ''
17)統計伺服器狀態連線數
netstat -an|awk '/tcp/ end}'
netstat -an|awk '/tcp/ '|sort|uniq -c
Shell程式設計四劍客之AWK
awk是乙個優良的文字處理工具,linux 及unix 環境中現有的功能最強大的資料處理引擎之一,以aho weinberger kernighan三位發明者名字首字母命名為awk,awk是乙個行級文字高效處理工具,awk經過改進生成的新的版本有nawk gawk,一般linux預設為gawk,ga...
shell四劍客之sed
格式 sed nefri 動作 其中n e f r i 動作有a,i,c,p,s n 預設把sed命令執行的結果,與原來的資料一起輸出到螢幕,如果加了 n,則只顯示sed處理後的內容 sed n 1p sed.txt a 在匹配的當前行的後面新增內容,add sed ahelloworld sed....
shell四劍客之find
find主要用來查詢檔案名,其基本格式 find path option print exec ok command 常用引數如下 name find name four 查詢名為four的檔案 包括目錄和檔案 find name fou 查詢開頭是fou的檔案 find name a z 查詢大寫...