Table of Contents
參考博客:https://www.cnblogs.com/arkenstone/p/6490017.html。 * 參考鏈接:http://www.cnblogs.com/007sx/p/5811137.html https://pay.weixin.qq.com/wiki/doc/api/app/app.php。[url=https://www.wang1314.com/doc/topic-8079107-1.html]omg (83)[/url] [url=https://www.wang1314.com/doc/topic-8079076-1.html]omg (98)[/url] [url=https://www.wang1314.com/doc/topic-8079025-1.html]歐米茄omg (51)[/url] [url=https://www.wang1314.com/doc/topic-8078942-1.html]歐米茄 (87)[/url]。
盡管操作可能會(huì)很復(fù)雜,但語法總是這樣,其中 pattern 表示 AWK 在數(shù)據(jù)中查找的內(nèi)容,而 action 是在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令;ɡㄌ(hào)({})不需要在程序中始終出現(xiàn)linux命令,但它們用于根據(jù)特定的模式對(duì)一系列指令進(jìn)行分組。 pattern就是要表示的正則表達(dá)式,用斜杠括起來。
awk語言的最基本功能是在文件或者字符串中基于指定規(guī)則瀏覽和抽取信息,awk抽取信息后,才能進(jìn)行其他文本操作。完整的awk腳本通常用來格式化文本文件中的信息。
通常,awk是以文件的一行為處理單位的。awk每接收文件的一行l(wèi)inux命令,然后執(zhí)行相應(yīng)的命令,來處理文本。
有三種方式調(diào)用awk
1.命令行方式
awk [-F field-separator] 'commands' input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可選的。 input-file(s) 是待處理的文件。
在awk中,文件的每一行中,由域分隔符分開的每一項(xiàng)稱為一個(gè)域。通常,在不指名-F域分隔符的情況下,默認(rèn)的域分隔符是空格。
2.shell腳本方式
將所有的awk命令插入一個(gè)文件,并使awk程序可執(zhí)行,然后awk命令解釋器作為腳本的首行,一遍通過鍵入腳本名稱來調(diào)用。
相當(dāng)于shell腳本首行的:#!/bin/sh
可以換成:#!/bin/awk
3.將所有的awk命令插入一個(gè)單獨(dú)文件,然后調(diào)用:
awk -f awk-script-file input-file(s)
其中,-f選項(xiàng)加載awk-script-file中的awk腳本,input-file(s)跟上面的是一樣的。
實(shí)例:
顯示/etc/passwd的賬戶
如果只是顯示/etc/passwd的賬戶
默認(rèn)情況下,記錄的分隔符是回車,字段的分隔符是空白符,所以文本文件的每一行表示一個(gè)記錄,而每一行中的內(nèi)容被空白分隔成多個(gè)字段。 "$ifs",對(duì)于某些命令輸入的特殊變量分割域,默認(rèn)使用的是空白.。制表符和新行符都用做域分割符號(hào)。
這種是awk+action的示例,每行都會(huì)執(zhí)行action{print $1}。
如果只是顯示/etc/passwd的賬戶和賬戶對(duì)應(yīng)的shell,而賬戶與shell之間以tab鍵分割
[^] 匹配一個(gè)不在指定范圍內(nèi)的字符,如:/[^a-rt-z]ed/匹配不包含a-r和t-z的一個(gè)字母開頭,緊跟ed的行。list.remove(‘keyword‘):指定元素內(nèi)容刪除,需要注意到的是如果有多個(gè)位置的元素內(nèi)容一樣,那么只會(huì)刪除第一個(gè)匹配到的元素。否則輸出那些沒匹配好的,并把它匹配好之后的輸出。