awk if 不包含 20分鐘降服awk

2021-10-13 18:50:29 字數 2128 閱讀 6601

awk是unix下的文字處理工具,功能複雜靈活,可以實現諸如cat, grep, cut, head, sed, wc 等所有文字處理命令的功能。相應的,awk的學習成本也是比較高的。我一直是邊用邊查邊學。網是的內容比較靈散,總有一種見樹不見林的感覺。今天讀到了awk in 20 minutes一文,讓人拍案教絕。此文從巨集觀角度分析了awk程式的概念、結構和工作方式,用20%篇幅講清楚了awk的80%的功能,讓人不禁感概想見恨晚。現擇其要點分享給大家。

首先,awk指令碼的結構是這樣的:

# comment

pattern1

# comment

pattern2

awk從標準輸入逐行讀取內容,然後使用不同的模式(pattern)進行匹配,如果匹配成功,則會執行對應大括號內的動作(action)。這就是awk的執行模型。讀取、匹配、執行,就這麼簡單,所用複雜的功能都是在這個模型之上衍生出來的。

在說模式和動作之間,先簡單提一下變數

awk的變數有三種:字串、數字和字典。字串和數字可以相互轉換。

變數無需宣告,可直接使用,如。數字變數可以執行數**算,如。字典賦值使用方括號,如

awk內建一組特殊變數,分別是$0, $1, ..., $n。它們都以美元符號開頭,所面跟乙個數字。它們的值取自 awk 讀入的文體內容。比如 awk 讀入的一行內容為a b c,那麼對應的$1的內容為a$2$3的內容分別為bc$0比較特別,其內容是讀入的整行即a b c。 awk預設使用乙個或多個空白字元切割字段。

awk還有另一拔不常用的高階內建變數,在有些場景下有奇效,大家留點印像就好了。

begin 

有了變數基礎,我們再說模式。模式有三類:正則模式、布林模式和特殊模式。

典型的正則模式有

/admin/      # 匹配包含 admin 的內容

/^admin/ # 匹配 admin 開頭的內容

/admin$/ # 匹配 admin 結尾的內容

/^[0-9.]+ / # 匹配數字開頭的內容

/(post|put|delete)/ # 匹配包含部分 http 請求的內容

對於更簡單的場景,你還可以直接使用變數比較運算來過濾內容,比如

$1 == 200  # 匹配狀態碼為 200 的請求日誌(假設第一列為 http 狀態碼)

$1 >= 500 # 匹配 5xx 請求

$1 != 200 # 匹配非 200 請求

你還可以使用布林表示式將這些匹配模式組合起來,比如

/admin/ || $1 >= 500 # 匹配 admin 介面的 5xx 錯誤
除此之外,awk還支援兩種特殊的模式:beginend,分別在指令碼開始之前和結束之後觸發。比如awk 'begin/admin/end'會在結束的時候輸出含有admin日誌的行數

最後說一下動作。簡單的動作有

# 變數賦值

# 字典賦值

# 結束程式,很少使用

# 跳過當前行

awk還支援條件分支和迴圈結構,如下

else if ($3 >= 400) 

else

}end } }

請理 ubuntu 的 rc 配置包

dpkg -l|awk '/^rc/ '|xargs aptitude purge -y

時間差不多了,你學會了嗎?

20分鐘徹底明白vue

初學vue時,使用script引入該框架,基本的語法過一遍,這不是什麼難事。進步到了這裡,通常不太明白的是vue的核心思想 資料驅動。一句話解釋 傳統jquery操作 html原始檔 瀏覽器解析 渲染為最終呈現頁面 vue資料繫結 html原始檔 vue攔截,進行dom diff計算 瀏覽器解析 渲...

20分鐘學會Ruby(1 4)

前言 請點我。互動式ruby 開啟irb ok,如圖所示,那它就是被開啟了。輸入 hello world 按回車,結果如下圖所示 ruby任你使喚 剛才發生了什麼?我寫了乙個世界上最短的 hello world 程式?基本上是的!第二行只是irb告訴我們求解最後一行表示式的結果。如果我們想在螢幕上列...

獲取20分鐘後(前)的時間

方式一 calendar calendar calendar.getinstance int min calendar.get calendar.minute 獲取20分鐘的時間 min 20 獲取20分鐘前的時間 min 20 calendar.set calendar.minute,min da...