一、awk的優(yōu)點(diǎn)和缺點(diǎn):
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)文昌免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。優(yōu)點(diǎn):1.awk用來(lái)取列,單獨(dú)取列簡(jiǎn)單方便
2.awk支持正則表達(dá)式
3.awk支持變量
4.awk支持&&和||
5.awk支持流程控制語(yǔ)句,如if 和if/else 條件控制
6.awk支持循環(huán),如while、do-while和for循環(huán)
7.awk支持用于跳轉(zhuǎn)或者退出的命令break、continue、next 和exit等
8.awk支持函數(shù)
缺點(diǎn):awk功能強(qiáng)大,相對(duì)來(lái)說(shuō)較復(fù)雜
二、awk的命令格式:
awk '條件1 {動(dòng)作1} 條件2 {動(dòng)作2}...' file.txt
三、awk的用法:
1.打印匹配root的行
[root@localhost ~]# awk '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
2.-F選項(xiàng)的作用
2.1以冒號(hào)分隔,打印第一列數(shù)據(jù);不加-F選項(xiàng),默認(rèn)是空格,冒號(hào)可以自定義
[root@localhost ~]# awk -F: '{print $1,$3,$5,$7}' /etc/passwd
root 0 root /bin/bash
bin 1 bin /sbin/nologin
daemon 2 daemon /sbin/nologin
...
2.2 -F自定義分隔符,分隔數(shù)據(jù)
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
57G 7.2G 47G 14% /
/dev/sda1 99M 12M 82M 13% /boot
tmpfs 252M 0 252M 0% /dev/shm
[root@localhost ~]# df -h |grep /$ |awk '{print $4}' |awk -F"%" '{print $1}'
14
2.3cut命令同樣實(shí)現(xiàn)
[root@localhost ~]# df -h |grep /$ |awk '{print $4}' |cut -d"%" -f 1
14
2.4打印列的時(shí)候,逗號(hào)來(lái)分隔列
[root@localhost ~]# awk -F: '/root/{print $1 $3 $5 $7}' /etc/passwd
root0root/bin/bash
operator11operator/sbin/nologin
[root@localhost ~]# awk -F: '/root/{print $1,$3,$5,$7}' /etc/passwd
root 0 root /bin/bash
operator 11 operator /sbin/nologin
2.5打印列的時(shí)候,#來(lái)分隔列
[root@localhost ~]# awk -F: '/root/ {print $1"###"$7"###"$3}' /etc/passwd
root###/bin/bash###0
operator###/sbin/nologin###1
3.BEGIN和END的用法
3.1BEGIN的用法
[root@localhost ~]# df -h |grep /$ |awk '{print $4}' |awk -F"%" 'BEGIN{print "root_usage!"} {print $1}'
root_usage!
14
3.2BEGIN和END一起用,\n用來(lái)?yè)Q行
[root@localhost ~]# df -h |grep /$ |awk '{print $4}' |awk -F"%" 'BEGIN{print "\nroot_usage!" "\n==========="} {print $1} END{print"==========="}'
root_usage!
===========
14
===========
4.FS、OFS、NR、NF的用法
4.1FS等同于-F,以冒號(hào)分隔列
[root@localhost ~]# awk 'BEGIN{FS=":"} /root/ {print $1,$3,$5,$7}' /etc/passwd
root 0 root /bin/bash
operator 11 operator /sbin/nologin
4.2OFS改變默認(rèn)分隔符,用#號(hào)分隔列
[root@localhost ~]# awk -F: 'BEGIN{OFS="###"} /root/ {print $1,$3,$5,$7}' /etc/passwd
root###0###root###/bin/bash
operator###11###operator###/sbin/nologin
-v選項(xiàng)也可以實(shí)現(xiàn)
[root@localhost ~]# awk -F: -v OFS="###" '/root/ {print $1,$3,$5,$7}' /etc/passwd
root###0###root###/bin/bash
operator###11###operator###/sbin/nologin
4.3分號(hào)的用法
[root@localhost ~]# awk 'BEGIN {FS=":";OFS="#"} /root/ {print $1,$7}' /etc/passwd
root#/bin/bash
operator#/sbin/nologin
4.4NR用來(lái)打印行號(hào),而且列可以自定義位置打印
[root@localhost ~]# awk -F: '/root/ {print NR,$1,$7,$5,$3}' /etc/passwd
1 root /bin/bash root 0
12 operator /sbin/nologin operator 11
[root@localhost ~]# awk '/root/ {print NR,$0}' /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
12 operator:x:11:0:operator:/root:/sbin/nologin
4.5打印空行
[root@localhost ~]#awk '/^$/{print NR}' /etc/passwd
4.6這兩個(gè)命令等效,但grep的效率更高
[root@localhost ~]# awk '/root/ {print NR,$0}' /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
12 operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
12:operator:x:11:0:operator:/root:/sbin/nologin
4.7NF用來(lái)打印列數(shù),NF打印出有7列,$NF打印出最后一列
[root@localhost ~]# awk -F: '/root/ {print NR,NF,$NF,$0}' /etc/passwd
1 7 /bin/bash root:x:0:0:root:/root:/bin/bash
12 7 /sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
5.awk中的比較
<
<=
>
>=
== 等于
!=不等于
~匹配
!~不匹配
5.1打印大于等于37行的第一列
[root@localhost ~]# awk -F: 'NR>=37 {print NR,$1}' /etc/passwd
37 xfs
38 gdm
39 pegasus
40 oracle
5.2打印大于等于60的第四列
[root@localhost shell]#cat awk.txt
1 80 1 li
2 60 2 wang
3 70 3 zhang
4 10 4 zhao
[root@localhost shell]# awk '$2>=60 {print $4}' awk.txt
li
wang
zhang
5.3打印第一列匹配root的字段
[root@localhost ~]# awk -F: '$1=="root" {print $1,$3,$5,$7}' /etc/passwd
root 0 root /bin/bash
5.4打印全文匹配root的字段
[root@localhost ~]# awk -F: '$0~/root/ {print NR,$1,$7,$5,$3}' /etc/passwd
1 root /bin/bash root 0
12 operator /sbin/nologin operator 11
5.5打印第六列匹配root的字段
[root@localhost ~]# awk -F: '$6 ~/root/{print $1,$5,$6}' /etc/passwd
root root /root
operator operator /root
5.6打印第七行到第十二行中的字段
[root@localhost /]# awk -F : 'NR==7,NR==12 {print NR,$1,$7}' /etc/passwd
7 shutdown /sbin/shutdown
8 halt /sbin/halt
9 mail /sbin/nologin
10 news
11 uucp /sbin/nologin
12 operator /sbin/nologin
6.if判斷
6.1第一列等于root就打印
[root@localhost ~]# awk -F: '{if($1=="root")print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
6.2打印第一列匹配oracle的行
[root@localhost ~]# cat /etc/passwd |awk '{if($1 ~ "oracle") print NR,$0}'
40 oracle:x:500:501::/home/oracle:/bin/bash
6.3打印最后一列匹配bash的行
[root@localhost ~]# awk -F: '{if($NF~/bash/) print NR,$1,$NF}' /etc/passwd
1 root /bin/bash
31 postgres /bin/bash
35 mysql /bin/bash
40 oracle /bin/bash
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。