2019-06-19

1. awk三劍客命令概述

? ? ? ? ? ? # which awk--------查看awk在哪個(gè)目錄下

顯示:? /usr/bin/awk

? ? ? ? ? ? # ll /usr/bin/awk

顯示: lrwxrwxrwx. 1 root root 4 May 31 16:06 /usr/bin/awk -> gawk? ? ------查看awk更詳細(xì)的信息

? ? ? ? ? ? # man awk

顯示: gawk - pattern scanning and processing language

? ? ? ? ? ? 解析: 模式掃描(條件匹配)and 程序語(yǔ)言

awk: 擅長(zhǎng)取列? 擅長(zhǎng)統(tǒng)計(jì)分析(nginx zabbix tomcat ... SSH)ELK awk

03. awk三劍客命令執(zhí)行原理

? ? 參見示意圖

04. awk三件可命令語(yǔ)法結(jié)構(gòu)

? ? awk [參數(shù)] '模式(條件){動(dòng)作}(指令)'? 文件信息

05. awk三劍客命令實(shí)踐操作:查詢 排除 替換

? ? 部署準(zhǔn)備環(huán)境

cat > oldboy.txt <<EOF?

Zhang? Dandan? ? 41117397? ? :250:100:175

Zhang? Xiaoyu? ? 390320151? :155:90:201

Meng? Feixue? ? 80042789? ? :250:60:50

Wu? ? Waiwai? ? 70271111? ? :250:80:75

Liu? ? Bingbing? 41117483? ? :250:100:175

Wang? Xiaoai? ? 3515064655? :50:95:135

Zi? ? Gege? ? ? 1986787350? :250:168:200

Li? ? Youjiu? ? 918391635? :175:75:300

Lao? ? Nanhai? ? 918391635? :250:100:175

EOF

2. 實(shí)踐操作練習(xí):

? ? 01. 顯示xiaoyu的姓氏和ID號(hào)碼

? ? # awk '/Xiaoyu/{print $1 $3}' oldboy.txt

? ? Zhang390320151

? ? # awk '/Xiaoyu/{print $1,$3}' oldboy.txt

? ? Zhang 390320151

? ? # awk '/Xiaoyu/{print $1" "$3}' oldboy.txt

? ? Zhang 390320151

? ? 按照指定列進(jìn)行搜索信息Xiaoyu? ? ? ? 問題是內(nèi)容中有兩個(gè)Xiaoyu

? ? # awk '/Xiaoyu/' oldboy.txt? ? ? ? --- 將匹配信息的行直接顯示

? ? Zhang? Xiaoyu? ? 390320151? :155:90:201

? ? Xiaoyu zhang? ? 390320151? :155:90:201

? ? # awk '$2~/Xiaoyu/' oldboy.txt? ? --- 指定列信息匹配? 解決方法

? ? Zhang? Xiaoyu? ? 390320151? :155:90:201

? ? # awk '$2!~/Xiaoyu/' oldboy.txt? ? ----表示將指定列信息取返

? ? Zhang? Dandan? ? 41117397? ? :250:100:175

? ? Xiaoyu zhang? ? 390320151? :155:90:201

? ? Meng? Feixue? ? 80042789? ? :250:60:50

? ? Wu? ? Waiwai? ? 70271111? ? :250:80:75

? ? Liu? ? Bingbing? 41117483? ? :250:100:175

? ? Wang? Xiaoai? ? 3515064655? :50:95:135

? ? Zi? ? Gege? ? ? 1986787350? :250:168:200

? ? Li? ? Youjiu? ? 918391635? :175:75:300

? ? Lao? ? Nanhai? ? 918391635? :250:100:175

? ? 顯示xiaoyu的姓氏和ID號(hào):滿足要求槽华,正確語(yǔ)法格式

? ? # awk '$2~/Xiaoyu/{print $1,$3}' oldboy.txt

? ? Zhang 390320151

PS:awk命令默認(rèn)區(qū)分大小寫不需要加i? ? 沒有類似grep命令 -i參數(shù)功能

? ? 02.姓氏是zhang的人,顯示他的第二次捐款金額及他的名字

? ? ? ? 第一歷程:找出姓氏是張的人

? ? ? ? # awk '$1~/Zhang/' oldboy.txt

? ? ? ? ? ? Zhang? Dandan? ? 41117397? ? :250:100:175

? ? ? ? ? ? Zhang? Xiaoyu? ? 390320151? :155:90:201

? ? ? ? ? 第二歷程:顯示出名字信息 和所有捐款記錄

? ? ? ? ? # awk '$1~/Zhang/{print $2,$4}' oldboy.txt

? ? ? ? ? Dandan :250:100:175

? ? ? ? ? Xiaoyu :155:90:201

PS:在使用-F的參數(shù)下融痛,awk默認(rèn)使用空格進(jìn)行作為列分隔符

? ? ? ? ? 第三歷程:指定字符信息作為分隔符

? ? ? ? ? # awk -F "[: ]+" '$1~/Zhang/{print $2,$5}' oldboy.txt

? ? ? ? ? Dandan 100

? ? ? ? ? ? Xiaoyu 90

? ? 總結(jié):

01. awk默認(rèn)使用空格分隔列

02. 可以使用-F 指定分隔列的符號(hào)信息

03. 利用-F "[: ]+"? +表示將多個(gè)連續(xù)的分隔符匯總為一個(gè)整體

03. 顯示所有以41開頭的ID號(hào)碼的人的全名和ID號(hào)碼

第一個(gè)歷程:找出匹配id號(hào)碼是41開頭的行信息 --- 找出東西(模式寫好)

# awk '$3~/^41/' oldboy.txt

? ? ? ? ? ? ? ? ? Zhang? Dandan? ? 41117397? ? :250:100:175

? ? ? ? ? ? ? ? ? Liu? ? Bingbing? 41117483? ? :250:100:175

第二個(gè)歷程:顯示出人的全名 和 ID號(hào)碼? ? ? --- 對(duì)找出東西進(jìn)行處理(執(zhí)行動(dòng)作)

? ? ? ? ? ? ? ? ? ? # awk '$3~/^41/{print $1,$2,$3}' oldboy.txt|column -t

? ? ? ? ? ? ? ? ? ? Zhang? Dandan? ? 41117397

? ? ? ? ? ? ? ? ? ? Liu? ? Bingbing? 41117483

? ? 04. 顯示所有ID號(hào)碼最后一位數(shù)字是1或5的人的全名

第一個(gè)歷程:找出id號(hào)碼以1或5結(jié)尾信息? --- 找出信息

方法一:awk '$3~/1$|5$/' oldboy.txt

方法二:awk '$3~/[15]$/' oldboy.txt

第二個(gè)歷程:顯示全名信息? ? ? ? ? ? ? --- 找出信息做處理

awk '$3~/[15]$/{print $1,$2}' oldboy.txt|column -t

? ? 05. 顯示文件中第二行,第三列的信息

第一個(gè)歷程:匹配第二行

# awk 'NR==2' oldboy.txt

? ? ? ? ? ? ? ? ? ? Zhang? Xiaoyu? ? 390320151? :155:90:201

第二個(gè)歷程:顯示第三列

awk 'NR==2{print $3}' oldboy.txt

? ? ? ? 測(cè)試. 利用awk取出IP地址信息(grep sed)

第一個(gè)歷程:定位有IP地址的行? ? ? ? ? --- 找出信息

ip a s eth0|awk 'NR==3'

? ? ? ? ? ? ? ? ? inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

第二個(gè)歷程:只顯示IP地址? ? ? ? ? ? ? --- 做處理? 為什么是三前面和后面都有隱藏一個(gè)^ $

ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}'

? ? ? ? ? ? ? ? ? 10.0.0.201

? ? 說(shuō)明:在不指定-F參數(shù)信息,

? ? ? 1. 默認(rèn)將多個(gè)連續(xù)的空格匯總為整體

? ? ? 2. 默認(rèn)將一行頭部開始空格信息忽略不計(jì)

? ip a s eth0|awk -F "[^0-9.]+" 'NR==3{print $2}'

? ? ? ? ? ? ? ? ? ? 10.0.0.201

? 06. 顯示Xiaoyu的捐款,每個(gè)捐款數(shù)值都有以$開頭, 如$110$220$330

方法一:

# awk -F "[:]" '$2~/Xiaoyu/{print "$"$2"$"$3"$"$4}' oldboy.txt? 惦银??锥余?

? ? ? ? ? ? ? ? ? $155$90$201

方法二:

# awk? '$2~/Xiaoyu/{print $4}' oldboy.txt|sed 's#:#$#g'

? ? ? ? ? ? ? ? ? $155$90$201

? ? ? ? ? ? ? ? # awk? '$2~/Xiaoyu/{print $4}' oldboy.txt|tr ":" "$"

? ? ? ? ? ? ? ? ? $155$90$201

? ? ? ? ? ? ? ? ? 方法三:awk替換功能? sed tr

gsub(/要替換的信息/,"替換成什么",將第幾列進(jìn)行替換)

# awk? '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' oldboy.txt

? ? ? ? ? ? ? ? ? ? $155$90$201

? ? ? ? ? 07.利用awk排除指定信息不要顯示

awk '!/^$/' oldboy.txt

06. awk命令高級(jí)功能說(shuō)明:

? ? 普通模式? 正則表達(dá)式作為模式? ^ 還可以表示某一列的開始

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? $ 還可以表示某一列的結(jié)尾

? ? 比較表達(dá)式作為模式:

? ? ? ? ? ? # awk 'NR==1{print $NF}' oldboy.txt

? ? ? ? ? ? ? :250:100:17

? ? 范圍模式:

? ? ? ? ? ? ? awk 'NR==1;NR==2' oldboy.txt? ? --- 只查看第1和第2行

? ? ? ? ? ? ? awk 'NR==1,NR==3' oldboy.txt? ? --- 查看第一到第三行


? ? 特殊模式? BEGIN? 在處理文件之前先執(zhí)行的動(dòng)作

? ? 1)生成文件內(nèi)容表頭信息

? ? ? ? ? # awk 'BEGIN{print "姓氏","名稱","id號(hào)碼","捐款記錄"}{print $0}' oldboy.txt |column -t

? ? ? ? ? ? ? 姓氏? ? 名稱? ? ? id號(hào)碼? ? ? 捐款記錄

? ? ? ? ? ? ? Zhang? Dandan? ? 41117397? ? :250:100:175

? ? ? ? ? ? ? Zhang? Xiaoyu? ? 390320151? :155:90:201

? ? ? ? ? ? ? Xiaoyu? zhang? ? 390320151? :155:90:201

? ? ? ? ? ? ? Meng? ? Feixue? ? 800412789? :250:60:50

? ? ? ? ? ? ? Wu? ? ? Waiwai? ? 70271111? ? :250:80:75

? ? ? ? ? ? ? Liu? ? Bingbing? 41117483? ? :250:100:175

? ? ? ? ? ? ? Wang? ? Xiaoai? ? 3515064655? :50:95:135

? ? ? ? ? ? ? Zi? ? ? Gege? ? ? 1986787350? :250:168:200

? ? ? ? ? ? ? Li? ? ? Youjiu? ? 918391635? :175:75:300

? ? ? ? ? ? ? Lao? ? Nanhai? ? 918391635? :250:100:175

? ? 2)用于在系統(tǒng)中進(jìn)行運(yùn)算數(shù)值

awk 'BEGIN{print 2+3}'

? ? 3) 修改或設(shè)置變量信息

? ? ? ? ? a awk命令中躺苦,會(huì)直接將字符串信息當(dāng)成變量? $1 $NF $0(取一行中所有列)

? ? ? ? ? # awk 'BEGIN{oldboy=62;print oldboy}' -------設(shè)置變量

? ? ? ? ? ? ? ? 62

? ? ? ? ? # awk 'BEGIN{oldboy=62;print "oldboy"}' -----不想識(shí)別出變量

? ? ? ? ? ? ? ? oldboy

自定義變量:oldboy=62

內(nèi)置變量:

NF : 顯示最后一列信息? $(NF-1) 取倒數(shù)第2列

NR : 表示行號(hào)信息,取出第幾行? NR==2 NR>=2 NR<=2

FS : 指定分隔符信息? -F

? ? ? ? ? ? ? ? # awk -F ":" 'NR==1{print $2}' oldboy.txt

? ? ? ? ? ? ? ? 250

? ? ? ? ? ? ? ? # awk? 'BEGIN{FS=":"}NR==1{print $2}' oldboy.txt

? ? ? ? ? ? ? ? 250

? ? ? ? ? ? ? ? # awk -vFS=":" 'NR==1{print $2}' oldboy.txt

? ? ? ? ? ? ? ? 250

? END? ? 在處理文件之后再執(zhí)行的動(dòng)作 ***

? ? ? ? ? 1)顯示表格補(bǔ)充信息

? ? ? ? ? ? # awk 'BEGIN{print "姓氏","名稱","id號(hào)碼","捐款記錄"}{print $0}END{print "總結(jié):這是一個(gè)學(xué)生登記表"}' oldboy.txt|column

? ? ? ? ? ? ? 姓氏 名稱 id號(hào)碼 捐款記錄

? ? ? ? ? ? ? Zhang? Dandan? ? 41117397? ? :250:100:175

? ? ? ? ? ? ? Zhang? Xiaoyu? ? 390320151? :155:90:201

? ? ? ? ? ? ? Meng? Feixue? ? 800412789? ? :250:60:50

? ? ? ? ? ? ? Wu? ? Waiwai? ? 70271111? ? :250:80:75

? ? ? ? ? ? ? Liu? ? Bingbing? 41117483? ? :250:100:175

? ? ? ? ? ? ? Wang? Xiaoai? ? 3515064655? :50:95:135

? ? ? ? ? ? ? Zi? ? Gege? ? ? 1986787350? :250:168:200

? ? ? ? ? ? ? Li? ? Youjiu? ? 918391635? :175:75:300

? ? ? ? ? ? ? Lao? ? Nanhai? ? 918391635? :250:100:175

? ? ? ? ? ? ? 總結(jié):這是一個(gè)學(xué)生登記表

? ? ? ? ? 2)顯示計(jì)算的最終結(jié)果 OK

? ? ? ? ? awk '/^$/{i=i+1}END{print i}' /etc/services



07. awk運(yùn)算方法:

? ? 1)累加運(yùn)算:a b c d? 1+1+1+1

? i=i+1 --> i++

? 練習(xí)題01:統(tǒng)計(jì)一個(gè)文件中有多少個(gè)空行

? 第一個(gè)歷程:找出空行

? awk '/^$/' /etc/services

? 第二個(gè)歷程:做運(yùn)算處理

? # awk '/^$/{i=i+1;print i}' /etc/services

? ? ? 1

? ? ? 2

? ? ? 3

? ? ? 4

? ? ? 5

? ? ? 6

? ? ? 7

? ? ? 8

? ? ? 9

? ? ? 10

? ? ? 11

? ? ? 12

? ? ? 13

? ? ? 14

? ? ? 15

? ? ? 16

? ? ? 17

? ? ? # awk '/^$/{i=i+1}END{print i}' /etc/services

? ? ? 17


? 練習(xí)題02:統(tǒng)計(jì)/etc/passwd文件中最后一列有/sbin/nologin的出現(xiàn)了多少次

? ? ? [# awk -F ":" '$NF~/nologin$/{i++}END{print i}' /etc/passwd

? ? ? 17

? ? ? # awk '/nologin$/{i++}END{print i}' /etc/passwd

? ? ? 17



? ? 2)求和運(yùn)算: 10 20 30 60

? i=i+$n

? ? ? 實(shí)踐操作:

? ? ? # seq 10|awk '{i=i+$1;print i}'

? ? ? 1

? ? ? 3

? ? ? 6

? ? ? 10

? ? ? 15

? ? ? 21

? ? ? 28

? ? ? 36

? ? ? 45

? ? ? 55

? ? ? # seq 10|awk '{i=i+$1}END{print i}'

? ? ? 55

08. 課程知識(shí)總結(jié):

? ? 1)awk三劍客命令概述

? 1)作用:擅長(zhǎng)取列 擅長(zhǎng)統(tǒng)計(jì)運(yùn)算

? 2)語(yǔ)法:awk 參數(shù) '模式{動(dòng)作}' oldboy.txt

? ? ? 模式:常用模式 特殊模式(BEGIN END)

? 3)原理:

2)awk三劍客命令練習(xí)

? 6道題? 查(匹配信息) 修改替換? 刪除

? awk命令參數(shù):

? -F? : 指定分隔符號(hào)信息? ":"? "[:/]"? "[:/]+"

? -v? : 設(shè)置變量信息

? awk命令動(dòng)作:

? print: 打印輸出信息? 空格 , " "? 字符串 "oldboy"? 變量信息? oldboy? 指定列 $1 $NF $(NF-1) $0(所有列)

? gsub:? 替換指定列的信息? gsub(/要替換的內(nèi)容/,"替換成什么",$N)

? 計(jì)算:

? 累加運(yùn)算:i=i+1? i++

? 求和運(yùn)算:i=i+$n ?

? awk內(nèi)置變量:

? FS NF NR

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雄坪,一起剝皮案震驚了整個(gè)濱河市厘熟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌维哈,老刑警劉巖绳姨,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阔挠,居然都是意外死亡飘庄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門购撼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)跪削,“玉大人,你說(shuō)我怎么就攤上這事迂求∧胙危” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵揩局,是天一觀的道長(zhǎng)毫玖。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么付枫? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任烹玉,我火速辦了婚禮,結(jié)果婚禮上阐滩,老公的妹妹穿的比我還像新娘春霍。我一直安慰自己,他們只是感情好叶眉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布址儒。 她就那樣靜靜地躺著,像睡著了一般衅疙。 火紅的嫁衣襯著肌膚如雪莲趣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天饱溢,我揣著相機(jī)與錄音喧伞,去河邊找鬼。 笑死绩郎,一個(gè)胖子當(dāng)著我的面吹牛潘鲫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肋杖,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溉仑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了状植?” 一聲冷哼從身側(cè)響起浊竟,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎津畸,沒想到半個(gè)月后振定,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肉拓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年后频,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暖途。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卑惜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丧肴,到底是詐尸還是另有隱情残揉,我是刑警寧澤胧后,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布芋浮,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏纸巷。R本人自食惡果不足惜镇草,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘤旨。 院中可真熱鬧梯啤,春花似錦、人聲如沸存哲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祟偷。三九已至察滑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間修肠,已是汗流浹背贺辰。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嵌施,地道東北人饲化。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吗伤,于是被迫代替她去往敵國(guó)和親吃靠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容