如何使用awk處理文字內容

安全劍客發表於2020-10-17
導讀 Awk是為高階文字處理而設計的非常強大的工具。它逐行搜尋掃描檔案,將輸入的每行分割成欄位,將輸入行或欄位與模式進行比較,並對匹配的結果執行操作。

本節將使用sub和gsub函式和awk 來刪除檔案中的製表符和空格。我們將使用以下文字檔案作為本文中所有示例的輸入檔案:

[root@localhost ~]# cat << EOF >> content.txt

出現大於號時將一下內容複製到終端,將文字內容儲存到content.txt檔案中。

        hitesh engineer sales 30000
jayesh director account 25000
vyom manager purchase 20000
bhavesh engineer sales 30000
 rajesh directory sales 40000
niraj clerk account 20000
jay peon purchase 23000
deep clerk sales 20000
EOF

如何使用awk處理文字內容如何使用awk處理文字內容

刪除檔案中的所有空白行

可以使用awk的特殊變數 NF,從檔案中刪除所有空白行。例如,刪除檔案content.txt中的所有空白行。

[root@localhost ~]# awk NF content.txt

如何使用awk處理文字內容如何使用awk處理文字內容

刪除每行開頭或者末尾的空格和製表符

使用awk 在檔案開頭找到一個或多個空格或製表符並刪除。可以使用以下命令:

[root@localhost ~]# awk '{ sub(/^[ \t]+/, ""); print }' content.txt

如何使用awk處理文字內容如何使用awk處理文字內容
命令列中的意思是:使用sub函式找到開頭是製表符和空格的行,並替換空格和製表符為空。注意:sub()函式替換隻發生在第一次匹配的時候,也就是一行中有多個空格或多個製表符,只替換左面的第一個。

刪除末尾的空格和製表符可以使用下面的命令:

[root@localhost ~]# awk '{ sub(/[ \t]+$/, ""); print }' content.txt

同時查詢開頭和末尾的空格和製表符,可以使用下面命令:

[root@localhost ~]# awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }' content.txt

gsub函式表示滿足條件,替換所有的匹配字元。

倒序列出檔案中的所有行

它記錄陣列中的所有行,並將它們以相反的順序排列。使用以下命令:

[root@localhost ~]# awk '{ b[i++] = $0 } END { for (j=i-1; j>=0;) print b[j--] }' content.txt

如何使用awk處理文字內容如何使用awk處理文字內容

新增行號為每行內容

使用以下命令使用NF內建變數對非空行進行編號:

[root@localhost ~]# awk 'NF { $0=++a ": " $0 }; { print }' content.txt

如何使用awk處理文字內容如何使用awk處理文字內容

列印包含特定字串的行數

使用以下命令來列印包含engineer的總行數:

[root@localhost ~]# awk '/engineer/{n++}; END {print n+0}'  content.txt

如何使用awk處理文字內容如何使用awk處理文字內容

列印與指定字串匹配的行

下面例項中,篩選出含有 engineer字串的行:

[root@localhost ~]# awk '/engineer/' content.txt

如何使用awk處理文字內容如何使用awk處理文字內容

列印與指定字串不匹配的行

下面例項中,列印不包含字串 jayesh 的行:

[root@localhost ~]# awk '!/jayesh/' content.txt

如何使用awk處理文字內容如何使用awk處理文字內容

替換字串

例項一:將content.txt中的字串“ engineer”替換為“ doctor”,用到gsub()函式:

[root@localhost ~]# awk '{gsub(/engineer/,"doctor")}{print}' content.txt

如何使用awk處理文字內容如何使用awk處理文字內容
例項二:查詢字串“ jayesh”,“ hitesh”或“ bhavesh”,並將其替換為字串“ mahesh”,執行以下命令:

[root@localhost ~]# awk '{gsub(/jayesh|hitesh|bhavesh/ , "mahesh"); print}' content.txt

如何使用awk處理文字內容如何使用awk處理文字內容

配合df命令,顯示磁碟空間

可以將awk命令與df一起使用,只顯示裝置名稱和可用空間、使用率。

[root@localhost ~]# df -h | awk '{printf("%-24s \t %-6s \t %-4s \n",$1,$4,$5)}'

如何使用awk處理文字內容如何使用awk處理文字內容

檢視每個IP開啟的連線數

如果認為伺服器受到攻擊,那麼這種awk單行程式碼非常有用。它將顯示伺服器的開啟連線列表,並按數量對它們進行排序。

[root@localhost ~]# netstat -ntu|awk '{print $5}'|cut -d: -f1|awk '/[0-9]/'|sort|uniq -c|sort -n

如何使用awk處理文字內容如何使用awk處理文字內容

總結

我們透過實際示例瞭解如何使用一行awk命令執行日常任務。

本文原創地址:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2727633/,如需轉載,請註明出處,否則將追究法律責任。

相關文章