日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

通用線程:Awk 實例


DanIEl Robbins (drobbins@gentoo.org)
第一部分
Awk 是一種非常好的語言,同時有一個非常奇怪的名稱 。在本系列(共三篇文章)的第一篇文章中,Daniel Robbins 將使您迅速掌握 awk 編程技巧 。隨著本系列的進展,將討論更高級的主題,最后將演示一個真正的高級 awk 演示程序 。
捍衛(wèi) awk
在本系列文章中,我將使您成為精通 awk 的編碼人員 。我承認,awk 并沒有一個非常好聽且又非?!皶r髦”的名字 。awk 的 GNU 版本(叫作 gawk)聽起來非常怪異 。那些不熟悉這種語言的人可能聽說過 "awk",并可能認為它是一組落伍且過時的混亂代碼 。它甚至會使最博學的 Unix 權威陷于錯亂的邊緣(使他不斷地發(fā)出 "kill -9!" 命令,就象使用咖啡機一樣) 。
的確,awk 沒有一個動聽的名字 。但它是一種很棒的語言 。awk 適合于文本處理和報表生成,它還有許多精心設計的特性,允許進行需要特殊技巧程序設計 。與某些語言不同,awk 的語法較為常見 。它借鑒了某些語言的一些精華部分,如 C 語言、python 和 bash(雖然在技術上,awk 比 python 和 bash 早創(chuàng)建) 。awk 是那種一旦學會了就會成為您戰(zhàn)略編碼庫的主要部分的語言 。
第一個 awk
讓我們繼續(xù),開始使用 awk,以了解其工作原理 。在命令行中輸入以下命令:
$ awk "{ print }" /etc/passwd
您將會見到 /etc/passwd 文件的內(nèi)容出現(xiàn)在眼前 。現(xiàn)在,解釋 awk 做了些什么 。調(diào)用 awk 時,我們指定 /etc/passwd 作為輸入文件 。執(zhí)行 awk 時,它依次對 /etc/passwd 中的每一行執(zhí)行 print 命令 。所有輸出都發(fā)送到 stdout,所得到的結(jié)果與與執(zhí)行catting /etc/passwd完全相同 。
現(xiàn)在,解釋 { print } 代碼塊 。在 awk 中,花括號用于將幾塊代碼組合到一起,這一點類似于 C 語言 。在代碼塊中只有一條 print 命令 。在 awk 中,如果只出現(xiàn) print 命令,那么將打印當前行的全部內(nèi)容 。
這里是另一個 awk 示例,它的作用與上例完全相同:
$ awk "{ print $0 }" /etc/passwd
在 awk 中,$0 變量表示整個當前行,所以 print 和 print $0 的作用完全一樣 。
如果您愿意,可以創(chuàng)建一個 awk 程序,讓它輸出與輸入數(shù)據(jù)完全無關的數(shù)據(jù) 。以下是一個示例:
$ awk "{ print "" }" /etc/passwd
只要將 "" 字符串傳遞給 print 命令,它就會打印空白行 。如果測試該腳本,將會發(fā)現(xiàn)對于 /etc/passwd 文件中的每一行,awk 都輸出一個空白行 。再次說明, awk 對輸入文件中的每一行都執(zhí)行這個腳本 。以下是另一個示例:
$ awk "{ print "hiya" }" /etc/passwd
運行這個腳本將在您的屏幕上寫滿 hiya 。:)
多個字段
awk 非常善于處理分成多個邏輯字段的文本,而且讓您可以毫不費力地引用 awk 腳本中每個獨立的字段 。以下腳本將打印出您的系統(tǒng)上所有用戶帳戶的列表:【通用線程:Awk 實例】$ awk -F":" "{ print $1 }" /etc/passwd
上例中,在調(diào)用 awk 時,使用 -F 選項來指定 ":" 作為字段分隔符 。awk 處理 print $1 命令時,它會打印出在輸入文件中每一行中出現(xiàn)的第一個字段 。以下是另一個示例
$ awk -F":" "{ print $1 $3 }" /etc/passwd
以下是該腳本輸出的摘錄
halt7operator11root0shutdown6sync5bin1....etc.
如您所見,awk 打印出 /etc/passwd 文件的第一和第三個字段,它們正好分別是用戶名和用戶標識字段 ?,F(xiàn)在,當腳本運行時,它并不理想 -- 在兩個輸出字段之間沒有空格!如果習慣于使用 bash 或 python 進行編程,那么您會指望 print $1 $3 命令在兩個字段之間插入空格 。然而,當兩個字符串在 awk 程序中彼此相鄰時,awk 會連接它們但不在它們之間添加空格 。以下命令會在這兩個字段中插入空格:
$ awk -F":" "{ print $1 " " $3 }" /etc/passwd

推薦閱讀