Linux三劍客(awk-4)-awk的模式(pattern)

朱雙印——awk從放棄到入門(6):awk模式

我們之前一直在提,awk的使用語法如下:

awk [options] 'Pattern {Action} file1 file2 ...'
  • 對于options(選項)而言厨姚,我們使用過-F選項衅澈,也使用過-v選項;
  • 對于Action(動作)而言遣蚀,我們使用過print和printf矾麻。
  • 對于Pattern(模式)而言纱耻,我們開始學(xué)習(xí)awk的時候,就知道了兩種特殊模式险耀,BEGIN模式和END模式弄喘,接下來甩牺,我們將詳細(xì)的介紹一下awk的模式蘑志。

“模式”不好理解。但是將“模式”換成“條件”贬派,可能更容易理解急但,那么“條件”是什么意思呢?awk是逐行處理文本的搞乏,也就是說波桩,awk會先處理完當(dāng)前行,再處理下一行请敦,如果我們不指定任何“條件”镐躲,awk會一行一行的處理文本的每一行,如果指定了“條件”侍筛,只有滿足“條件”的行才會被處理萤皂,不滿足“條件”的行就不會被處理。

如下圖所示匣椰,test2文件中有3行文本裆熙,第一行有4列,第二行有5列禽笑,第三行只有2列入录,而下圖的awk命令中,就使用到了一個簡單的模式佳镜。

awk模式條件

上圖中纷跛,當(dāng)處理的行正好有5列字段(NF==5)時,那么被處理的行滿足“條件”邀杏,滿足條件的行就會執(zhí)行相應(yīng)的動作,而動作就是${print $0}唬血,即打印當(dāng)前行望蜡。

模式的條件

上圖中使用的Pattern(模式)中,都使用了關(guān)系表達(dá)式(關(guān)系操作符)拷恨,當(dāng)經(jīng)過關(guān)系運算得出的結(jié)果為“真”時脖律,則滿足條件(表示與指定的模式匹配),滿足條件腕侄,就會執(zhí)行相應(yīng)的動作小泉。

awk支持的運算符

關(guān)系運算符 含義 用法示例
< 小于 x<y
<= 小于等于 x<=y
== 等于 x==y
!= 不等于 x!=y
>= 大于等于 x>=y
> 大于 x>y
~ 與對應(yīng)的正則匹配則為真 x~/正則/
!~ 與對應(yīng)的正則不匹配則為真 x!~/正則/

我們把這種用到“關(guān)系運算符”的“模式”稱為:“關(guān)系表達(dá)式模式”或者“關(guān)系運算符模式”芦疏。

1. 空模式和關(guān)系表達(dá)式模式

空模式和關(guān)系表達(dá)式模式

上圖中命令1指定了“模式”,這種“模式”是“關(guān)系表達(dá)式模式”微姊,如果當(dāng)前行的字段數(shù)量等于5酸茴,模式則匹配,對應(yīng)的行被打印兢交。

上圖中命令2貌似沒有使用任何“模式”薪捍,所以,每一行都執(zhí)行了指定的動作配喳,即每一行都被輸出了酪穿,其實,這種沒有指定任何模式的情況晴裹,也是一種模式被济。我們稱這種情況為“空模式”〗牛“空模式”會匹配文本中的每一行只磷,所以,每一行都滿足“條件”少欺,每一行都執(zhí)行相應(yīng)的動作喳瓣。

2. BEGIN模式和END模式

BEGIN模式和END模式

Linux三劍客(awk-1)-awk命令基礎(chǔ)

  • BEGIN模式指定了處理文本之前所需要執(zhí)行的操作;
  • END模式指定了處理完所有行之后所需要執(zhí)行的操作赞别;

3. 正則模式

上面說到畏陕,模式可以理解為條件》绿希【空模式】當(dāng)不指定模式時惠毁,文本中的每一行都會執(zhí)行對應(yīng)的動作;當(dāng)指定模式時崎页,符合條件的行才會執(zhí)行對應(yīng)的動作鞠绰。

什么叫做正則模式,正則模式可以理解為:把正則表達(dá)式當(dāng)做條件飒焦,能與正則匹配的行蜈膨,就算滿足條件,滿足條件的行才會執(zhí)行對應(yīng)的動作牺荠,不能被正則匹配的行翁巍,則不會執(zhí)行對應(yīng)的動作。

例子:我們知道休雌,在Linux中灶壶,/etc/passwd文件中存放了用戶信息,那么假設(shè)杈曲,我們想要從/etc/passwd文件中找出用戶名以zsy開頭的用戶驰凛,我們該如何操作胸懈?

grep+正則表達(dá)式

如何使用awk命令,完成上述的需求恰响?

awk+正則表達(dá)式

可以看出趣钱,不管是使用grep命令還是使用awk命令,都使用了相同的正則表達(dá)式^zsy渔隶。唯一的區(qū)別就是羔挡,在grep命令中,直接使用了正則表達(dá)式间唉。而在awk命令中绞灼,正則表達(dá)式被放在了兩個斜線中。

awk和grep的區(qū)別

上例中呈野,grep和awk的命令實現(xiàn)的效果是一樣的低矮,而且grep更加簡單一些,那為什么還要使用awk命令呢被冒?

awk有著自己的優(yōu)勢军掂,那就是格式化能力。換一個場景:

awk格式化輸出
  1. 從/etc/passwd文件中找出符合條件的行昨悼;
  2. 找出符合條件的文本行后蝗锥,以:為分隔符,將文本分段率触;
  3. 取出我們需要的字段终议,格式化輸出;
  4. 結(jié)合BEGIN模式葱蝗。輸出一個格式化以后的文本穴张,提高可讀性;

正則模式的注意點

  • 需要注意:使用正則模式時两曼,如果正則中包含"/"皂甘,則需要進(jìn)行轉(zhuǎn)義。
對/進(jìn)行轉(zhuǎn)義
  • 需要注意:當(dāng)使用{x,y}這種次數(shù)匹配的正則表達(dá)式的時候悼凑,需要配合--posix選項或者--re-interval選項偿枕。
image.png

4. 行范圍模式

行范圍模式條件就是滿足兩行之間的數(shù)據(jù)。

在介紹行范圍模式之前户辫,先來思考一個問題益老。有一個文本文件,文件內(nèi)容如下:

原始文本

如上圖所示寸莫,Green出現(xiàn)了2次,Kenvin也出現(xiàn)了2次档冬。假設(shè)我想從上述文本中找出膘茎,從Green第一次出現(xiàn)桃纯,到Kenvin第一次出現(xiàn)之間的所有行,該怎么辦披坏?

image.png

我們可以把行范圍模式和正則模式的語法進(jìn)行對比:

行范圍模式和正則模式
  • 上圖中第一種語法是正則模式的語法态坦,表示被正則表達(dá)式匹配的行,將執(zhí)行對應(yīng)的動作棒拂。
  • 上圖中第二種語法是行范圍模式的語法伞梯,表示被正則1匹配到的行開始,到正則2匹配到的行結(jié)束帚屉,之間的行所有行都會執(zhí)行對應(yīng)的動作谜诫。所以這種模式稱為行范圍模式,因為他對應(yīng)一個范圍以內(nèi)的所有行攻旦。但需要注意的是喻旷,在行范圍模式中,不管是正則1牢屋,還是正則2且预,都以第一次匹配到的行為準(zhǔn)。

但是可能存在這樣的需求烙无,不想依靠正則表達(dá)式去匹配行的特征锋谐,只是想單純的打印從X行到Y(jié)行之間的所有行。

在之前學(xué)習(xí)到的關(guān)系運算符模式截酷,可滿足我們的需求:

單純打印行范圍文本

5. 關(guān)系表達(dá)式模式+正則模式

在學(xué)習(xí)"關(guān)系表達(dá)式模式"時涮拗,有一個"關(guān)系運算符"需要和"正則模式"配合使用,它就是"~"合搅。

關(guān)系運算符 含義 用法示例
~ 與對應(yīng)的正則匹配則為真 x~/正則/
!~ 與對應(yīng)的正則不匹配則為真 x!~/正則/

關(guān)系運算符""和關(guān)系運算符"!"都需要配合"正則模式"使用多搀。

例如:我想從如下文本中找出,網(wǎng)卡1的IP地址在192.168.0.0網(wǎng)段的主機灾部,該怎么辦康铭?

image.png

可以使用如下面命令,利用關(guān)系運算符與正則模式赌髓,達(dá)到我們的目的从藤;

關(guān)系運算符+正則模式
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锁蠕,隨后出現(xiàn)的幾起案子夷野,更是在濱河造成了極大的恐慌,老刑警劉巖荣倾,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悯搔,死亡現(xiàn)場離奇詭異,居然都是意外死亡舌仍,警方通過查閱死者的電腦和手機妒貌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門通危,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灌曙,你說我怎么就攤上這事菊碟。” “怎么了在刺?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵逆害,是天一觀的道長。 經(jīng)常有香客問我蚣驼,道長魄幕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任隙姿,我火速辦了婚禮梅垄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘输玷。我一直安慰自己队丝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布欲鹏。 她就那樣靜靜地躺著机久,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赔嚎。 梳的紋絲不亂的頭發(fā)上膘盖,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音尤误,去河邊找鬼侠畔。 笑死,一個胖子當(dāng)著我的面吹牛损晤,可吹牛的內(nèi)容都是我干的软棺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼尤勋,長吁一口氣:“原來是場噩夢啊……” “哼喘落!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起最冰,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤瘦棋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后暖哨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赌朋,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了箕慧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片服球。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颠焦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情往枣,我是刑警寧澤伐庭,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站分冈,受9級特大地震影響圾另,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雕沉,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一集乔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坡椒,春花似錦扰路、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丈攒,卻和暖如春哩罪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巡验。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工际插, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人显设。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓框弛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親敷硅。 傳聞我的和親對象是個殘疾皇子功咒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • awk awk****推薦去看朱雙印的博客“awk****從放棄到入門”,寫的真的很好绞蹦,本文的awk****就總結(jié)...
    凱盍Ψ埽看世界閱讀 1,343評論 1 14
  • 轉(zhuǎn)載 原文的排版和內(nèi)容都更加友好,并且詳細(xì),我只是在這里貼出了一部分留作自己以后參考和學(xué)習(xí),如希望更詳細(xì)了解AWK...
    XKirk閱讀 3,192評論 2 25
  • 一. AWK 說明 awk的處理文本和數(shù)據(jù)的方式:它逐行掃描文件,從第一行到最后一行幽七,尋找匹配的特定模式的行景殷,并...
    西華子閱讀 927評論 0 4
  • grep擅長查找,awk擅長分析(select),sed擅長批量編輯行 概述 AWK是一門解釋型的編程語言猿挚。在文本...
    Arroganter閱讀 314評論 0 1
  • 語錄:你不會給自己安全感咐旧,別人是給不了你的,因為別人給的安全感都沒有自己給的來的踏實 我是個超級沒有安全感的人绩蜻,尤...
    幸福珊寶貝閱讀 182評論 0 0