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...