知識(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 --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
- 顯示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
- 姓氏是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
- 顯示所有以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
- 顯示所有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
- 獲取文件中有井號(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

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ì)分析
-
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)算
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