2019-07-25

知識(shí)梳理:
1) awk命令概念介紹: 語(yǔ)法 原理 BEGIN 處理文件 END
2) awk命令操作說(shuō)明: 作用 查詢 排除 替換
參數(shù):
-F : 指定列分割符號(hào)
-v : 指定變量信息
動(dòng)作:
print : 輸出指定信息
gsub : 替換指定信息
符號(hào):
~ : 匹配信息 按照指定列進(jìn)行匹配
!~ : 將匹配的信息取反
// : 指定匹配信息
3) awk命令模式分類
BEGIN{}: 處理文件前, 執(zhí)行什么動(dòng)作
END{}: 處理文件后, 執(zhí)行什么動(dòng)作
內(nèi)置變量: FS NF NR --0 4) awk命令實(shí)現(xiàn)運(yùn)算功能 累加公式: i=i+1 i++ 求和運(yùn)算: sum=sum+n

awk

語(yǔ)法 : awk [參數(shù)] '模式{動(dòng)作}' 文件
處理文件信息: 文本文件信息 日志文件信息 配置文件信息
處理文件方式: 排除信息 查詢信息 統(tǒng)計(jì)信息 替換信息
對(duì)文件列進(jìn)行處理

awk操作:創(chuàng)建測(cè)試環(huán)境

[root@oldboyedu ~]# cat reg.txt
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
  1. 顯示xiaoyu的姓氏和ID號(hào)碼

awk '{print $1 $3}'  文件信息

第一個(gè)步驟: 找出需要編寫模式信息
獲取xiaoyu信息

awk '/Xiaoyu/'  reg.txt
awk '$2~/Xiaoyu/' reg.txt

第二個(gè)步驟: 根據(jù)條件做處理
顯示滿足條件的第三列和第一列信息

awk '$2~/Xiaoyu/{動(dòng)作}' reg.txt
awk '$2~/Xiaoyu/{print $1 $3}' reg.txt

答案:

[root@oldboyedu ~]# awk '$2~/Xiaoyu/{print $1,$3}' reg.txt
Zhang 390320151
[root@oldboyedu ~]# awk '$2~/Xiaoyu/{print $1" "$3}' reg.txt
Zhang 390320151
  1. 姓氏是Zhang的人,顯示他的第二次捐款金額及他的名字
    第一個(gè)步驟: 找出需要編寫模式信息

awk '$1~/Zhang/' reg.txt

第二個(gè)步驟: 根據(jù)條件做處理

awk '$1~/Zhang/{print $1,$2,$4}' reg.txt
awk -F ":"  '$1~/Zhang/{print $3}' reg.txt

答案:

[root@oldboyedu ~]# awk -F "[: ]+"  '$1~/Zhang/{print $1,$2,$5}' reg.txt
Zhang Dandan 100
Zhang Xiaoyu 90
  1. 顯示所有以41開頭的ID號(hào)碼的人的全名和ID號(hào)碼
    第一個(gè)步驟: 找出需要編寫模式信息

awk '$3~/^41/' reg.txt

第二個(gè)步驟: 根據(jù)條件做處理
答案:

[root@oldboyedu ~]# awk '$3~/^41/{print $1,$2,$3}' reg.txt
Zhang Dandan 41117397
Liu Bingbing 41117483
[root@oldboyedu ~]# awk '$3~/^41/{print $1,$2,$3}' reg.txt|column -t
Zhang  Dandan    41117397
Liu    Bingbing  41117483
  1. 顯示所有ID號(hào)碼最后一位數(shù)字是1或5的人的全名
    第一個(gè)步驟: 找出需要編寫模式信息

awk '$3~/1$|5$/' reg.txt
awk '$3~/[15]$/' reg.txt
awk '$3~/(1|5)$/' reg.txt

第二個(gè)步驟: 根據(jù)條件做處理
答案

[root@oldboyedu ~]# awk '$3~/[15]$/{print $1,$2}' reg.txt|column -t
Zhang  Xiaoyu
Wu     Waiwai
Wang   Xiaoai
Li     Youjiu
Lao    Nanhai
[root@oldboyedu ~]# awk '$3~/[15]$/{print $1,$2,$3}' reg.txt|column -t
Zhang  Xiaoyu  390320151
Wu     Waiwai  70271111
Wang   Xiaoai  3515064655
Li     Youjiu  918391635
Lao    Nanhai  918391635
  1. 獲取文件中有井號(hào)或空行的內(nèi)容, 將空行和井號(hào)信息的行排除
    第一個(gè)步驟: 找出需要編寫模式信息

awk '/#|^$/'  reg.txt       
awk '$0~/#|^$/'  reg.txt    
說(shuō)明: $0 表示將文件所有列信息進(jìn)行顯示
awk '$0!~/#|^$/'  reg.txt
awk '!/#|^$/'  reg.txt

第二個(gè)步驟: 根據(jù)條件做處理
答案:

[root@oldboyedu ~]# awk '$0!~/#|^$/'  reg.txt
Zhang  Dandan    41117397    :250:100:175
Meng   Feixue    80042789    :250:60:50
Wu     Waiwai    70271111    :250:80:75
Liu    Bingbing  41117483    :250:100:175
Zi     Gege      1986787350  :250:168:200
Li     Youjiu    918391635   :175:75:300
Lao    Nanhai    918391635   :250:100:175
Lao    Nanhai    Xiaoyu   :250:100:175
[root@oldboyedu ~]# awk '$0!~/#|^$/{print $0}'  reg.txt
Zhang  Dandan    41117397    :250:100:175
Meng   Feixue    80042789    :250:60:50
Wu     Waiwai    70271111    :250:80:75
Liu    Bingbing  41117483    :250:100:175
Zi     Gege      1986787350  :250:168:200
Li     Youjiu    918391635   :175:75:300
Lao    Nanhai    918391635   :250:100:175
Lao    Nanhai    Xiaoyu   :250:100:175

6. 顯示Xiaoyu的捐款,每個(gè)捐款數(shù)額都是以$開頭, 如$110$220$330  
awk '$2~/Xiaoyu/{print $4}' reg.txt|sed 's#:#$#g'   
awk '$2~/Xiaoyu/{print $4}' reg.txt|tr ':' '$'
awk -F "[: ]+" '$2~/Xiaoyu/{print "$"$4,"$"$5,"$"$6}' reg.txt
![image.png](https://upload-images.jianshu.io/upload_images/18572620-286c144c3187f87e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

awk替換

gsub  = gawk substitute
gsub(/要替換的信息/,"替換成什么".$將第幾列)
[root@oldboyedu ~]# awk  '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' reg.txt
$155$90$201
說(shuō)明: $NF 表示文件的最后一列信息 

awk命令模式分類

普通模式: 比較行信息

[root@oldboyedu ~]# cat reg.txt
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

(將大于第二行(不包括第二行)的信息顯示出來(lái))

[root@oldboyedu ~]# awk  'NR>2' reg.txt
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

(將小于第二行(不包括第二行)的信息顯示出來(lái))

[root@oldboyedu ~]# awk  'NR<2' reg.txt
Zhang  Dandan    41117397    :250:100:175   
說(shuō)明: NR 表示文件行信息

取出多行信息

[root@oldboyedu ~]# awk  'NR==2,NR==4' reg.txt  --- 連續(xù)多行
Zhang  Xiaoyu    390320151   :155:90:201    (逗號(hào)表示從2到4行)
Meng   Feixue    80042789    :250:60:50
Wu     Waiwai    70271111    :250:80:75

[root@oldboyedu ~]# awk  'NR==2;NR==4' reg.txt  --- 不連續(xù)多行
Zhang  Xiaoyu    390320151   :155:90:201      (分號(hào)表示2行和4行)
Wu     Waiwai    70271111    :250:80:75

特殊模式:
BEGIN{動(dòng)作}: 在處理文件之前,先做什么事情

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

[root@oldboyedu ~]# awk  'BEGIN{print "姓","名","號(hào)碼","捐款記錄"}{print $0}' reg.txt|column -t
姓     名        號(hào)碼        捐款記錄
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

用于計(jì)算:

[root@oldboyedu ~]# awk "BEGIN{print 2+2}"
4
[root@oldboyedu ~]# awk "BEGIN{print 2-2}"
0
[root@oldboyedu ~]# awk "BEGIN{print 2*2}"
4
[root@oldboyedu ~]# awk "BEGIN{print 3/2}"
1.5
[root@oldboyedu ~]# awk "BEGIN{print 3^2}"
9
[root@oldboyedu ~]# awk "BEGIN{print 3^3}"
27
[root@oldboyedu ~]# awk "BEGIN{print 3**3}"
27
[root@oldboyedu ~]# awk "BEGIN{print 5%3}"
2

修改內(nèi)置變量:
NF: 取出最后一列

awk '{print $(NF-1)}' reg.txt   --- 取出倒數(shù)第二列

NR: 表示行信息
FS: 指定列分隔符, 默認(rèn)識(shí)別空格為分割符

[root@oldboyedu ~]# awk 'BEGIN{FS="[: ]+"}{print $4}' reg.txt
     250
     155
     250
     250
     250
     50
     250
     175
     250
[root@oldboyedu ~]# awk -vFS="[: ]+"  '{print $1,$4}' reg.txt
     Zhang 250
     Zhang 155
     Meng 250
     Wu 250
     Liu 250
     Wang 50
     Zi 250
     Li 175
     Lao 250

END{動(dòng)作}: 在處理文件之后,再做什么事情
awk 'BEGIN{print "姓","名","號(hào)碼","捐款記錄"}{print $0}END{print "學(xué)生捐款登記表"}' reg.txt|column -t

[root@oldboyedu ~]# awk  'BEGIN{print "姓","名","號(hào)碼","捐款記錄"}{print $0}END{print "學(xué)生捐款登記表"}' reg.txt|column -t
姓              名        號(hào)碼        捐款記錄
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
學(xué)生捐款登記表

實(shí)際作用:
可以將統(tǒng)計(jì)后的最終結(jié)果進(jìn)行輸出

awk對(duì)文件進(jìn)行統(tǒng)計(jì)分析

  1. awk統(tǒng)計(jì)運(yùn)算公式
    a 文本信息累加運(yùn)算


    image.png

i=i+1   或 i++

統(tǒng)計(jì)文件行數(shù)
awk '{i=i+1}END{print i}' test.txt

[root@oldboyedu ~]# awk '/oldboy/{i=i+1}END{print i}' test.txt 
4
[root@oldboyedu ~]# awk '/oldboy/{i++}END{print i}' test.txt 
4

b 數(shù)值信息求和運(yùn)算

image.png

sum=sum+$n  $n  你要對(duì)文件第幾列信息做求和運(yùn)算 
[root@oldboyedu ~] # seq 10|awk '{sum=sum+$1}END{print sum}'
  55

windows文件如何傳輸?shù)絣inux系統(tǒng)
yum install -y lrzsz --- 實(shí)現(xiàn)windows和linux系統(tǒng)之間數(shù)據(jù)傳輸
rz -- 將windows數(shù)據(jù) ---> linux系統(tǒng)
sz -- 將linux數(shù)據(jù) ---> windows系統(tǒng)

找出有faild信息, 總共出現(xiàn)了多少次 (awk統(tǒng)計(jì))

[root@oldboyedu ~]# awk '/Failed/{i++}END{print i}' secure-20161219
367500
[root@oldboyedu ~]# awk '$6~/Failed/{i++}END{print i}' secure-20161219
367500
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末军浆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挡闰,更是在濱河造成了極大的恐慌乒融,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摄悯,死亡現(xiàn)場(chǎng)離奇詭異赞季,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奢驯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門申钩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人叨橱,你說(shuō)我怎么就攤上這事典蜕。” “怎么了罗洗?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵愉舔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我伙菜,道長(zhǎng)轩缤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮火的,結(jié)果婚禮上壶愤,老公的妹妹穿的比我還像新娘。我一直安慰自己馏鹤,他們只是感情好征椒,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湃累,像睡著了一般勃救。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上治力,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天蒙秒,我揣著相機(jī)與錄音,去河邊找鬼宵统。 笑死晕讲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的马澈。 我是一名探鬼主播瓢省,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼痊班!你這毒婦竟也來(lái)了净捅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辩块,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后荆永,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體废亭,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年具钥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秦驯,死狀恐怖蝴乔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宁玫,我是刑警寧澤粗恢,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站欧瘪,受9級(jí)特大地震影響眷射,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一妖碉、第九天 我趴在偏房一處隱蔽的房頂上張望涌庭。 院中可真熱鬧,春花似錦欧宜、人聲如沸坐榆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)席镀。三九已至,卻和暖如春蚀狰,著一層夾襖步出監(jiān)牢的瞬間愉昆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工麻蹋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跛溉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓扮授,卻偏偏與公主長(zhǎng)得像芳室,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刹勃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359