如何使用awk處理文字內容
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的特殊變數NF
,從檔案中刪除所有空白行。例如,刪除檔案content.txt中的所有空白行。
[root@localhost ~]# awk NF content.txt
刪除每行開頭或者末尾的空格和製表符
使用awk命令在檔案開頭找到一個或多個空格或製表符並刪除。可以使用以下命令:
[root@localhost ~]# awk '{ sub(/^[ \t]+/, ""); print }' content.txt
命令列中的意思是:使用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
新增行號為每行內容
使用以下命令使用NF內建變數對非空行進行編號:
[root@localhost ~]# awk 'NF { $0=++a ": " $0 }; { print }' content.txt
列印包含特定字串的行數
使用以下命令來列印包含engineer的總行數:
[root@localhost ~]# awk '/engineer/{n++}; END {print n+0}' content.txt
列印與指定字串匹配的行
下面例項中,篩選出含有 engineer字串的行:
[root@localhost ~]# awk '/engineer/' content.txt
列印與指定字串不匹配的行
下面例項中,列印不包含字串 jayesh 的行:
[root@localhost ~]# awk '!/jayesh/' content.txt
替換字串
例項一:將content.txt中的字串“ engineer”替換為“ doctor”,用到gsub()函式:
[root@localhost ~]# awk '{gsub(/engineer/,"doctor")}{print}' content.txt
例項二:查詢字串“ jayesh”,“ hitesh”或“ bhavesh”,並將其替換為字串“ mahesh”,執行以下命令:
[root@localhost ~]# awk '{gsub(/jayesh|hitesh|bhavesh/ , "mahesh"); print}' content.txt
配合df命令,顯示磁碟空間
可以將awk命令與df一起使用,只顯示裝置名稱和可用空間、使用率。
[root@localhost ~]# df -h | awk '{printf("%-24s \t %-6s \t %-4s \n",$1,$4,$5)}'
檢視每個IP開啟的連線數
如果認為伺服器受到攻擊,那麼這種awk單行程式碼非常有用。它將顯示伺服器的開啟連線列表,並按數量對它們進行排序。
[root@localhost ~]# netstat -ntu|awk '{print $5}'|cut -d: -f1|awk '/[0-9]/'|sort|uniq -c|sort -n
總結
我們通過實際示例瞭解如何使用一行awk命令執行日常任務。
「其他文章」
- findmnt命令查詢已掛載的檔案系統
- 在Linux中如何檢視檔案的修改日期
- 用FRP做內網穿透使用遠端桌面連線家裡的windows電腦
- SUSE Linux 的Zypper包管理器使用例項
- 如何使用nload實時監控網路頻寬
- 如何使用awk處理文字內容
- 如何將CentOS 8轉換為CentOS Stream
- 如何自動接受SSH金鑰指紋?
- 夏天到了用TypeScript給自己開個小空調吧
- Bash Shell指令碼中的陣列使用例項
- Linux系統中的basename命令使用例項
- centos8使用chrony作為NTP伺服器
- Linux中如何使用Aria2下載檔案
- Centos8 如何配置DHCP伺服器
- 如何在Shell指令碼中逐行讀取檔案
- 使用Systemctl命令來管理系統服務
- 使用lsblk命令列出系統中的塊裝置
- 如何在Linux中使用 Truncate 命令
- Centos8種如何更改執行級別
- Zeit – Linux圖形化中定時任務的工具