Unix awk程序設(shè)計(jì)命令行使用知識(shí)講解
我們?cè)谶@里講解Unix awk程序設(shè)計(jì)的內(nèi)容,但在講解之前,我們將用一些例子來(lái)對(duì)前面的知識(shí)進(jìn)行回顧,這些例子都是在命令行中使用的,由此我們可以知道在命令行中使用Unix awk是多么的方便。
這樣做的原因一方面是為下面的內(nèi)容作鋪墊,另一方面是介紹一些解決簡(jiǎn)單問(wèn)題的方法,我們完全沒(méi)有必要用復(fù)雜的方法來(lái)解決簡(jiǎn)單的問(wèn)題----既然Unix awk提供了較為簡(jiǎn)單的方法的話。
例:顯示文本文件mydoc匹配(含有)字符串"sun"的所有行。
$awk '/sun/{print}' mydoc
由于顯示整個(gè)記錄(全行)是Unix awk的缺省動(dòng)作,因此可以省略action項(xiàng)。
$awk '/sun/' mydoc
例:下面是一個(gè)較為復(fù)雜的匹配的示例:
$awk '/[Ss]un/,/[Mm]oon/ {print}' myfile
它將顯示第一個(gè)匹配Sun或sun的行與第一個(gè)匹配Moon或moon的行之間的行,并顯示到標(biāo)準(zhǔn)輸出上。
例:下面的示例顯示了內(nèi)置變量和內(nèi)置函數(shù)length()的使用:
$awk 'length($0)>80 {print NR}' myfile
該命令行將顯示文本myfile中所有超過(guò)80個(gè)字符的行號(hào),在這里,用$0表示整個(gè)記錄(行),同時(shí),內(nèi)置變量NR不使用標(biāo)志符'$'。
例:作為一個(gè)較為實(shí)際的例子,我們假設(shè)要對(duì)Unix中的用戶進(jìn)行安全性檢查,方法是考察/etc下的passwd文件,檢查其中的passwd字段(第二字段)是否為"*",如不為"*",則表示該用戶沒(méi)有設(shè)置密碼,顯示出這些用戶名(第一字段)。我們可以用如下語(yǔ)句實(shí)現(xiàn):
#awk -F: '$2=="" {printf("%s no password! ",$1' /etc/passwd
在Unix awk這個(gè)示例中,passwd文件的字段分隔符是“:”,因此,必須用-F:來(lái)更改默認(rèn)的字段分隔符,這個(gè)示例中也涉及到了內(nèi)置函數(shù)printf的使用。
【編輯推薦】