描述:強大的文本分析工具,按行處理。正則表達式
用法:awk '/search pattern1/ {Actions}shell
/search pattern2/ {Actions}' file數組
1.search pattern正則表達式 布爾值函數
2.Actions 輸出的語法工具
3.單引號的做用防止shell截斷spa
工做方式:命令行
1) Awk 一次讀取文件中的一行code
2)對於一行,按照給定的正則表達式的順序進行匹配,若是匹配則執行對應的 Action字符串
3)若是沒有匹配上則不執行任何動做io
4)在上訴的語法中, Search Pattern 和 Action 是可選的,可是必須提供其中一個
5)若是 Search Pattern 未提供,則對全部的輸入行執行 Action 操做
6)若是 Action 未提供,則默認打印出該行的數據
7) {} 這種 Action 不作任何事情,和未提供的 Action 的工做方式不同
8) Action 中的語句應該使用分號分隔
內建變量
變量 | 描述 |
---|---|
\$n | 當前記錄的第n個字段,字段間由FS分隔 |
\$0 | 完整的輸入記錄 |
ARGC | 命令行參數的數目 |
ARGIND | 命令行中當前文件的位置(從0開始算) |
ARGV | 包含命令行參數的數組 |
CONVFMT | 數字轉換格式(默認值爲%.6g)ENVIRON環境變量關聯數組 |
ERRNO | 最後一個系統錯誤的描述 |
FIELDWIDTHS | 字段寬度列表(用空格鍵分隔) |
FILENAME | 當前文件名 |
FNR | 同NR,但相對於當前文件 |
FS | 字段分隔符(默認是任何空格) |
IGNORECASE | 若是爲真,則進行忽略大小寫的匹配 |
NF | 當前記錄中的字段數 |
NR | 當前記錄數 |
OFMT | 數字的輸出格式(默認值是%.6g) |
OFS | 輸出字段分隔符(默認值是一個空格) |
ORS | 輸出記錄分隔符(默認值是一個換行符) |
RLENGTH | 由match函數所匹配的字符串的長度 |
RS | 記錄分隔符(默認是一個換行符) |
RSTART | 由match函數所匹配的字符串的第一個位置 |
SUBSEP | 數組下標分隔符(默認值是/034) |
示例:
[root@share19 ~]# cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
awk 默認
[root@share19 ~]# awk '{print}' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
awk 打印匹配的行
[root@share19 ~]# awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
打印指定域
[root@share19 ~]# awk '{print $2,$5}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,00
[root@share19 ~]# awk '{print $2,$NF}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000
awk 開始結束動做
BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions }
[root@share19 ~]# awk 'BEGIN {print "NAME/tDesignation/tDepartment/tSalary"} {print $2,"\t",$3,"\t",$4,"\t",$NF} END {print "Report Generated\n--------------------"}' employee.txt NAME/tDesignation/tDepartment/tSalary Thomas Manager Sales $5,000 Jason Developer Technology $5,500 Sanjay Sysadmin Technology $7,000 Nisha Manager Marketing $9,500 Randy DBA Technology $6,000 Report Generated --------------------
找出ID>200的員工
[root@share19 ~]# awk '$1>200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
打印技術部員工
[root@share19 ~]# awk '$4 ~ /Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
打印技術部的員工數
[root@share19 ~]# awk 'BEGIN {count = 0} > $4 ~ /Technology/ {count = count +1} > END {print "Number of employee in Technology Dept",count}' employee.txt Number of employee in Technology Dept 3