回憶起一件事情:之前用linux尋找中文輸入法的時(shí)候,在百度輸入了fcitx,然后結(jié)果上邊有個(gè),您要找的是不是: 諷刺騰訊 。本來一直記不住這個(gè)輸入法名字,不過以后哥就記住這個(gè)輸入法的名字是怎么拼了,感謝百度。
第九章awk的驚人表現(xiàn)
awk的調(diào)用可以定義變量、提供程序并且指定輸入文件,語法:
代碼如下:
awk [ -F fs ] [ -v var=value ... ] 'program' [ -- ] [ var=value ... ] [file(s) ]
awk [ -F fs ] [ -v var=value ... ] -f programfile [ -- ] [ var=value ... ] [ file(s) ]
短程序通常直接在命令行上提供,而比較長的程序則委托-f選項(xiàng)指定,可以重復(fù)使用此選項(xiàng)。如果命令行未指定文件名,則awk會(huì)從標(biāo)準(zhǔn)輸入讀取。 -- 是特殊選項(xiàng),指出awk本身已經(jīng)沒有更進(jìn)一步的命令行選項(xiàng)。任何接下來的選項(xiàng)都可被你的程序使用。
-F選項(xiàng)是用來重新定義默認(rèn)字段分隔字符,且一般慣例將它作為第一個(gè)命令選項(xiàng)。緊接-F選項(xiàng)后的fs參數(shù)是一個(gè)正則表達(dá)式或是被提供作為下一個(gè)參數(shù)。字段分隔字符也可以設(shè)置使用內(nèi)建變量FS所指定。如:
awk -F '/t' '{ ... }' files FS="[/f/v]" files
上邊例子-F選項(xiàng)設(shè)置的值,應(yīng)用到第一個(gè)文件組,而由FS指定的值,則應(yīng)用到第二個(gè)組。初始化的-v選項(xiàng)必須放在命令行上直接給定的任何程序之前,他們會(huì)在程序啟動(dòng)前生效。在一命令行程序之后-v選項(xiàng)會(huì)被解釋為一個(gè)文件名。在命令行上其他地方的初始化會(huì)在處理參數(shù)時(shí)完成,并且會(huì)帶上文件名,如:
awk '{...}' Pass=1 *.tex Pass=2 *.tex
處理文件的列表兩次,第一次Pass設(shè)為1,第二次為2。使用字符串值進(jìn)行初始化無須用引號(hào)框起來,除非shell要求這樣的引用以保護(hù)特殊字符或空白。
特殊文件名-(連字符)表示標(biāo)準(zhǔn)輸入。大部分現(xiàn)代的awk實(shí)現(xiàn)(不包括POSIX)都認(rèn)定特殊名稱/dev/stdin為標(biāo)準(zhǔn)輸入,即使主機(jī)操作系統(tǒng)不支持該文件名。同樣:/dev/stderr與/dev/stdout可用于awk程序內(nèi),分別表示標(biāo)準(zhǔn)錯(cuò)誤輸出與標(biāo)準(zhǔn)輸出。
一般awk命令模式或操作可省略一個(gè),如果模式省略,則每條輸入都被操作;如果操作省略,則默認(rèn)操作為輸出匹配模式的記錄。雖然模式多半是數(shù)字或字符串表達(dá)式,不過awk以保留自BEGIN與END提供兩種特殊模式。
與BEGIN關(guān)聯(lián)的操作只會(huì)執(zhí)行一次,在任何命令行文件或一般命令行賦值被處理之前,但是在任何開頭的-v選項(xiàng)指定已完成之后。它大部分是用來處理程序所需要的任何特殊初始化工作。END操作也是只執(zhí)行一次。用于所有輸出數(shù)據(jù)已被處理完之后。BEGIN和END模式可以是任意順序,可以存在awk程序內(nèi)任何位置。當(dāng)指定多個(gè)BEGIN或END模式,則他們將按照在awk程序里的順序執(zhí)行。
awk提供了標(biāo)量與數(shù)組兩種變量以保存數(shù)據(jù)、數(shù)字與字符串表達(dá)式,還提供了一些語句類型以處理數(shù)據(jù):賦值、注釋、條件、函數(shù)、輸入、循環(huán)及輸出。awk表達(dá)式許多功能與c語言相似。awk里注釋是從#開始到行尾。跨行語句需要在結(jié)尾處加上反斜杠。
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注