天天看點

linux指令之awk指令——文本和資料進行處理的程式設計語言

linux指令之awk指令——文本和資料進行處理的程式設計語言
linux指令之awk指令——文本和資料進行處理的程式設計語言

awk指令來自于三位創始人”Alfred Aho,Peter Weinberger, Brian Kernighan “的姓氏縮寫,其功能是用于對文本和資料進行處理的程式設計語言。使用awk指令可以讓使用者自定義函數或正規表達式對文本内容進行高效管理,與sed、grep并稱為Linux系統中的文本三劍客。

linux指令之awk指令——文本和資料進行處理的程式設計語言

文法格式:awk 參數 檔案

常用參數:

-F 指定輸入時用到的字段分隔符
-v 自定義變量
-f 從腳本中讀取awk指令
-m 對val值設定内在限制

内置變量:

變量名稱 說明
ARGC 指令行參數個數
ARGV 指令行參數排列
ENVIRON 支援隊列中系統環境變量的使用
FILENAME awk浏覽的檔案名
FNR 浏覽檔案的記錄數
FS 設定輸入域分隔符,等價于指令行 -F選項
NF 浏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符

參考執行個體

僅顯示指定檔案中第1、2列的内容(預設以空格為間隔符):

[root@linuxcool ~]# awk ' {print $1,$2} ' anaconda-ks.cfg
#version=RHEL8 
ignoredisk --only-use=sda
autopart --type=lvm
# Partition
clearpart --none
………………省略部分輸出資訊………………           

以冒号為間隔符,僅顯示指定檔案中第1列的内容:

[root@linuxcool ~]# awk -F : '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
………………省略部分輸出資訊………………           

以冒号為間隔符,顯示系統中所有UID号碼大于500的使用者資訊(第3列):

[root@linuxcool ~]# awk -F : '$3>=500' /etc/passwd
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
………………省略部分輸出資訊………………           

僅顯示指定檔案中含有指定關鍵詞root的内容:

[root@linuxcool ~]# awk '/root/{print}' anaconda-ks.cfg 
rootpw --iscrypted $6$n9sZuTcY8Yzk4l.Q$LsuMNAROewyx.LomDtPpL9iJIOD3tsRThnzsAGE0hZXLMtdVCHVQ3pxzm3El8K2kuhcYLXJnhz.xUDGiE27s/1
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty           

以冒号為間隔符,僅顯示指定檔案中最後一個字段的内容:

[root@linuxcool ~]# awk -F: '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
………………省略部分輸出資訊………………           

繼續閱讀