awk 常被用於處理字段。所謂字段,就是文本文件中,每一行分成許多列,列與列之間用特定的字符隔開。
awk 命令分三部分: awk 本身 、 awk要執行的命令內容 、awk的輸入文件。 awk 執行命令時,依次讀取每一行,將命令應用到每一行。 - print 和 print $0 行為完全相同,都是打印一整行! -F 參數設置的是awk的初始化變量FS,FS控制著awk的字段分隔符,默認情況下是空白字符。 awk 支持設置多個字段分隔符,甚至用正則表達式來設置。 eg. awk -F"[\t ]+" // 表示此分隔符匹配一個或多個制表符或空格符 awk讀取標准輸入。 AWK的代碼結構: awk默認對每一個輸入行執行一段代碼塊。 awk的運行可看成3部分:處理輸入前的初始化(BEGIN{}代碼塊)、處理輸入過程({}代碼塊集合)、處理完所有輸入後的掃尾工作(END{}代碼塊)。 BEGIN代碼塊,主要完成awk部分參數的初始化操作! 核心處理輸入的過程:執行體 END代碼塊,是在所有輸入都處理完成後awk才去運行的代碼! - BEGIN 代碼塊 格式:BEGIN標簽加上{}。 在這個代碼塊中完成一些變量的初始化操作,只在初始化時被運行一次。 eg. awk定義FS變量為字段分隔符,在命令行 -F參數用於指定字段分割符,在BEGIN代碼段中這樣寫: fs.awk // awk 腳本,-f 參數引用腳本到awk命令中BEGIN{ FS=":" // 將冒號賦給FS變量,改變字段分隔符} {print "USER: " $1 "\tSHELL: " $7}head -n10 /etc/passwd |awk -f fs.awk awk 'BEGIN{FS=":"}{print "USER: " $1 "\tSHELL: " $7}'BEGIN{ # 初始化信息,便於閱讀 print "How many prople with nologin?"}/nologin/{++adder} # 核心awk處理過程END{ # 掃尾工作,打印結果 print "'nologin' appears " adder " times."}awk -f search.awk /etc/passwdawk '/^$/{print "This is an empty line."}'/etc/inittab # 匹配空行一次執行一次輸出BEGIN{ print "SHELL USAGE:"}/bash/{++bash} // /nologin/{++nologin}END{ print "We have " bash " bash users." print "We have " nologin " nologin users." }awk -f shell_recorder.awk /etc/passwdawk 'BEGIN {print "(3+2)*7=" (3+2)*7}'(3+2)*7=35awk 'BEGIN {print "3^10=" 3^10}'3^10=590491936圖靈提出人類歷史上第一個人工智能的概念1946世界上第一台計算機"埃尼阿克(ENIAC)"在美國賓西法尼亞大學誕生1956第二代計算機產生1969Ken.ThompsoDernis.Ritchie發布第一版Unix1979 AT&T從各大學收回Unix版權,此後誕生了System V 和 BSD 兩個版本線的Unix操作系統1983RichardStallman創建GNU(GNU is not Unix.),1983-1991年GNU三大軟件:Bash shell、gcc、emacs.1991LinusTorvalds發布Linux內核1994Lins加入GNU,GNU系列軟件與Linux內核結合,退出linus's minix,簡稱Linux.# awk 腳本求閏年BEGIN {print "Pick leap years:"}{# $1為記錄的第一個字段year=$1if(( year %4==0&& year %100!=0)||year %400==0)print year "is a leap year."elseprint year "is not a leap year."}END {print "Checking is over."}Pick leap years:1936is a leap year.1946is not a leap year.1956is a leap year.1969is not a leap year.1979is not a leap year.1983is not a leap year.1991is not a leap year.1994is not a leap year.1995is not a leap year.2016is a leap year.Checking is over. =+=-=*=/=^=**= 賦值 # **= 等價於^= ?: c條件表達式 # 三目運算符,用法:x>y?x:y 若x>y,則返回x,否則,返回y || 邏輯或 && 邏輯與 ~ ~! 匹配正則表達式不匹配正則表達式<<=>>=!=== 關系運算符空格 連接+- 加減 */% 乘除求余^ 求冪++-- 自加自減$ 引用字段in 數組成員+-! 一元加、減和邏輯非Linux常用命令之awk http://www.linuxidc.com/Linux/2016-09/135046.htm
Linux系統之文本格式化工具awk http://www.linuxidc.com/Linux/2016-02/128150.htm
AWK簡介及使用實例 http://www.linuxidc.com/Linux/2013-12/93519.htm
Linux awk文本分析工具 http://www.linuxidc.com/Linux/2015-12/126217.htm
Linux文本處理工具之awk http://www.linuxidc.com/Linux/2015-01/111437.htm
如何在Linux中使用awk命令 http://www.linuxidc.com/Linux/2014-10/107542.htm
文本分析工具-awk http://www.linuxidc.com/Linux/2014-12/110939.htm
AWK入門基礎教程 http://www.linuxidc.com/Linux/2016-12/138138.htm
使用awk格式化輸出文本 http://www.linuxidc.com/Linux/2016-04/130193.htm