溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

awk命令(2)

發(fā)布時間:2020-06-09 04:04:22 來源:網(wǎng)絡(luò) 閱讀:567 作者:zddnyl 欄目:關(guān)系型數(shù)據(jù)庫

一、awk的正則表達(dá)式

1.正則表達(dá)式常見的用法

[A-Z]一個大寫字母

[a-z]一個小寫字母

[0-9]一個數(shù)字

[^A-Z]除了大寫字母之外的一個字符

[^a-zA-Z]一個非英文字母的字符

[^a-zA-Z0-9]一個非英文字母、且非數(shù)字的字符

[a-z]\{3,5\}代表以小寫字母組成的字符串,長度是3~5


2.查看tcp端口狀態(tài)

[root@localhost ~]# netstat -ltn

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State      

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      

tcp        0      0 0.0.0.0:817                 0.0.0.0:*                   LISTEN      

tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      

tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      

tcp        0      0 :::5989                     :::*                        LISTEN      

tcp        0      0 :::22                       :::*                        LISTEN  


3.截取端口信息

[root@localhost ~]# netstat -ltn |awk '{print $4}' |awk -F: '/[0-9]$/ {print $NF}'

2208

111

817

631

25

2207

5989

22


4.打印匹配mysql或者oracle的數(shù)據(jù)

[root@localhost ~]# awk '$0~/mysql|oracle/{print $0}' /etc/passwd

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

oracle:x:500:501::/home/oracle:/bin/bash



5.打印匹配m或o或r開始的數(shù)據(jù)

[root@localhost ~]# awk '$0~/^[mor]/{print $0}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

oracle:x:500:501::/home/oracle:/bin/bash


6.打印非字母的數(shù)據(jù)

[root@localhost ~]# awk  '{if($0~/^[^a-zA-Z]/) print $0}' /etc/passwd



二、awk變量、判斷和循環(huán)的簡單用法

1,定義變量a="name is:",打印變量a和第一列

[root@localhost ~]# awk -F: '{a="name is:"} /root/ {print a,$1}' /etc/passwd

name is: root

name is: operator


2.begin定義變量,定義變量aa=0,匹配root就加1,完成之后再打印命令aa

[root@localhost ~]# awk 'BEGIN{aa=0} /root/ {aa++} END{print aa}' /etc/passwd

2


3.if判斷

[root@localhost ~]# awk -F: '{if($7!~"nologin") print $1,$7;else print NR,$NF}' /etc/passwd 


root /bin/bash

2 /sbin/nologin

sync /bin/sync

shutdown /sbin/shutdown

9 /sbin/nologin

32 /sbin/nologin

mysql /bin/bash

oracle /bin/bash

...


4.循環(huán)

if查看有兩行

[root@localhost ~]# awk '{if($0~/root/) print $0}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin


while只查詢一行就退出

[root@localhost ~]# awk '{while ($0~/root/) {print $0;exit}}' /etc/passwd

root:x:0:0:root:/root:/bin/bash



三、&&和||

[root@localhost shell]#tail -3 /etc/passwd |awk -F: '{if($0 ~ "27" && $0 ~ "bash") print $0 }'

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

[root@localhost shell]# tail -3 /etc/passwd |awk -F: '{if($0 ~ "mysql" || $0 ~ "oracle") print $0 }'

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

oracle:x:500:501::/home/oracle:/bin/bash


四、awk內(nèi)置變量

RS:行分隔符

FS:列分隔符

OFS:定義列分隔符

ORS:定義行分隔符,默認(rèn)是\n轉(zhuǎn)行

FILENAME:文件名

FNR:當(dāng)awk處理多個文件時,awk NR變量會給出針對所有文件的當(dāng)前記錄號(行號),Awk FNR 會顯示每個文件的當(dāng)前行號。



RS記錄行分隔符,默認(rèn)的分隔符是\n。

[root@localhost ~]# echo "1---2---3" |awk 'BEGIN{RS="---"}{print}'

1

2

3

ORS記錄輸出分隔符,默認(rèn)值是\n。ORS可以看成RS的逆向過程。

[root@localhost ~]# seq 3 |awk 'ORS=NR%3?"---":"\n"{print}'

1---2---3

[root@localhost ~]# seq 3 |awk '{ORS="---";print}';echo

1---2---3---


把---替換成***,FS和OFS互相替換

[root@localhost ~]# echo "1---2---3" |awk -F--- 'BEGIN {OFS="***"}{print $1,$2,$3}'

1***2***3


FILENAME的用法

[root@localhost shell]#awk 'BEGIN {FS=":"} {print NF,NR,$NF,$0}END{print "====================================================\n" FILENAME}' /etc/passwd

1 1 root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash

1 2 bin:x:1:1:bin:/bin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin

1 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin

1 4 adm:x:3:4:adm:/var/adm:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin

....

1 40 oracle:x:500:501::/home/oracle:/bin/bash oracle:x:500:501::/home/oracle:/bin/bash

====================================================

/etc/passwd


五、awk內(nèi)置的字符串函數(shù)

1.gsub(r,s)在整個$0中用s替換r

[root@localhost ~]# awk 'gsub ("root","bob"){print $0}' /etc/passwd

bob:x:0:0:bob:/bob:/bin/bash

operator:x:11:0:operator:/bob:/sbin/nologin


效果等同于sed的全局替換

[root@localhost ~]# sed -n 's/root/bob/gp'  /etc/passwd

bob:x:0:0:bob:/bob:/bin/bash

operator:x:11:0:operator:/bob:/sbin/nologin



gsub(r,s,t)在整個t中用s替換r

[root@localhost ~]# awk 'gsub ("root","bob",$2){print $0}' sedtest.txt

root bob root

root bob root


2.sub(r,s)用$0中最左邊最長的子串代替s

[root@localhost ~]# awk 'sub ("root","bob"){print $0}' /etc/passwd

bob:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/bob:/sbin/nologin


效果等同于sed局部替換

[root@localhost ~]# sed -n 's/root/bob/p'  /etc/passwd

bob:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/bob:/sbin/nologin


3.index(s,t)返回s中字符串t的位置

[root@localhost ~]# awk 'BEGIN{print index("I love you","ov")}'

4


4.length(s)返回s長度

[root@localhost ~]# awk 'BEGIN{print length("I love you")}'

10


5.match(s,r)測試s是否包含匹配r的字符串

[root@localhost ~]# awk 'BEGIN{print match("I love you","v")}'

5

[root@localhost ~]# awk 'BEGIN{print match("I love you","a")}'

0


6.split(s,a,fs)在fs上將s分成序列a


7.substr(s,p)返回字符串s中從p開始的后綴部分


8.substr(s,p,n)返回字符串s中從p開始長度為n的后綴部分



六、awk內(nèi)置數(shù)學(xué)函數(shù)

int(x)

sqrt(x)

exp(x)

log(x)

sin(x)

cos(x)


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI