您好,登錄后才能下訂單哦!
概述
awk有3個(gè)不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk 是 AWK 的 GNU 版本。 awk是一種優(yōu)良的文本處理工具。簡單來理解,awk逐行讀入數(shù)據(jù),將其賦給變量$0,然后對(duì)其進(jìn)行切片處理,以$1,$2,..的切片形式,一段一段進(jìn)行分析處理并輸出。
語法
awk '{pattern + action}' 或者 awk 'pattern {action}'
pattern 表示 AWK 在數(shù)據(jù)中查找的內(nèi)容。
action 是在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令。
入門實(shí)例
1. 使用$0查看所要處理的文本內(nèi)容
[root@chboa ~]# awk '{print $0}' test root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin |
2. awk + pattern,只是輸出匹配行,不做其他處理
[root@chboa ]# awk -F: '/root/' test root:x:0:0:root:/root:/bin/bash |
3. awk + action,對(duì)所有行進(jìn)行處理
[root@chboa ]# awk -F: '{print $1}' test root bin daemon adm lp sync shutdown halt uucp |
4. awk '/pattern/{action}'匹配并處理輸出
[root@chboa ]# awk -F: '/root/{print $7}' test /bin/bash |
5. 打印用戶和所對(duì)應(yīng)的bash,中間用tab分割
[root@chboa ~]# awk -F: '{print $1"\t"$7}' test root /bin/bash bin /sbin/nologin daemon /sbin/nologin adm /sbin/nologin lp /sbin/nologin sync /bin/sync shutdown /sbin/shutdown halt /sbin/halt mail /sbin/nologin uucp /sbin/nologin |
awk內(nèi)建變量
變量 | 功能 |
FIELDWIDTHS | 用空格分隔開的定義了每個(gè)數(shù)據(jù)字段確切寬度的一列數(shù)字 |
FS | 輸入字段分隔符 |
RS | 輸入數(shù)據(jù)行分隔符 |
OFS | 輸出字段分隔符 |
ORS | 輸出數(shù)據(jù)行分隔符 |
實(shí)例
使用FS指定輸入字段默認(rèn)分隔符
[root@chboa sed.test]# awk 'BEGIN{FS=":"}{print $1,$2}' test root x bin x daemon x adm x lp x sync x shutdown x halt x mail x uucp x |
2. 使用OFS指定輸出字段分隔符,默認(rèn)輸出字段分隔符為空格
[root@chboa ~]# awk 'BEGIN{FS=":";OFS="-"}{print $1,$2,$3}' test root-x-0 bin-x-1 daemon-x-2 adm-x-3 lp-x-4 sync-x-5 shutdown-x-6 halt-x-7 mail-x-8 uucp-x-10 |
3. 使用FIELDWIDTHS指定切分的固定寬度
[root@chboa ]# awk 'BEGIN{FIELDWIDTHS="6 2 3 3"}{print $1,$2,$3,$4}' test root:x :0 :0: roo bin:x: 1: 1:b in: daemon :x :2: 2:d adm:x: 3: 4:a dm: lp:x:4 :7 :lp :/v sync:x :5 :0: syn shutdo wn :x: 6:0 halt:x :7 :0: hal mail:x :8 :12 :ma uucp:x :1 0:1 4:u |
[root@chboa ~]# awk 'BEGIN{FIELDWIDTHS="6 5 8 2 1";OFS="--"}{print $1,$2,$3,$4,$5}' test root:x--:0:0:--root:/ro--ot--: bin:x:--1:1:b--in:/bin:--/s--b daemon--:x:2:--2:daemon--:/--s adm:x:--3:4:a--dm:/var/--ad--m lp:x:4--:7:lp--:/var/sp--oo--l sync:x--:5:0:--sync:/sb--in--: shutdo--wn:x:--6:0:shut--do--w halt:x--:7:0:--halt:/sb--in--: mail:x--:8:12--:mail:/v--ar--/ uucp:x--:10:1--4:uucp:/--va--r |
4. 有時(shí)候會(huì)遇到數(shù)據(jù)字段占用的多行的情況,經(jīng)典例子:姓名,地址,電話號(hào)碼在不同行。
目標(biāo):打印姓名,后面跟電話號(hào)碼。
注解:下面這個(gè)實(shí)例awk把文件中的每一行都當(dāng)成一個(gè)字段,空白行當(dāng)做數(shù)據(jù)行分隔符。
[root@chboa ~]# cat phone Myke John Nanjing Road (123)110110100 Xiao Ming Zhengzhou (456)120120100 [root@chboa ~]# awk 'BEGIN{FS="\n";RS=""}{print $1,$3}' phone Myke John (123)110110100 Xiao Ming (456)120120100 |
變量 | 功能 |
ARGC | 當(dāng)前命令行參數(shù)個(gè)數(shù) |
ARGV | 包含命令行參數(shù)的數(shù)組 |
ENVIRON | 當(dāng)前shell環(huán)境變量及其值組成的關(guān)聯(lián)數(shù)組 |
FILENAME | 用作gawk輸入數(shù)據(jù)的數(shù)據(jù)文件的文件名 |
IGNORECASE | 設(shè)成非零值時(shí),忽略gawk命令中出現(xiàn)的字符串的字符大小寫 |
FNR | 當(dāng)前數(shù)據(jù)文件中的數(shù)據(jù)行數(shù) |
NR | 已處理的輸入數(shù)據(jù)行的數(shù)目 |
NF | 數(shù)據(jù)文件中的字段總數(shù) |
使用內(nèi)部變量,打印報(bào)表
[root@chboa ~]# awk -F: '{print "filename:"FILENAME",linenumber:"NR",columns:"NF",linecontent:"$0}' test filename:test,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash filename:test,linenumber:2,columns:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin filename:test,linenumber:3,columns:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin filename:test,linenumber:4,columns:7,linecontent:adm:x:3:4:adm:/var/adm:/sbin/nologin filename:test,linenumber:5,columns:7,linecontent:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin filename:test,linenumber:6,columns:7,linecontent:sync:x:5:0:sync:/sbin:/bin/sync filename:test,linenumber:7,columns:7,linecontent:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown filename:test,linenumber:8,columns:7,linecontent:halt:x:7:0:halt:/sbin:/sbin/halt filename:test,linenumber:9,columns:7,linecontent:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin filename:test,linenumber:10,columns:7,linecontent:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin |
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。