三剑客: grep sed awk
grep 过滤
sed 过滤 取行 替换 修改文件内容 vi/vim > >>
‘’
--help
awk 过滤 取列 统计
-F
[面试题]老男孩教育-三剑客笔试题集合
https://www.jianshu.com/p/61d8883719ac
[root@web01 ~]# awk -F: 'NR==1{print $1,$3,$NF}' /etc/passwd
root 0 /bin/bash
awk 参数 '找谁{干啥}' 文件
awk 参数 '条件{动作}' 文件
花括号外面的是条件
找谁 条件 pattern 模式
{干啥} {动作} action 动作
[root@web01 ~]# x=10
[root@web01 ~]# y=3
[root@web01 ~]# awk 'BEGIN{print $x/$y}'
awk: cmd. line:1: fatal: division by zero attempted
[root@web01 ~]# #-v 创建或修改awk变量
[root@web01 ~]# awk -vn1=10 -vn2=3 'BEGIN{print n1/n2}'
3.33333
[root@web01 ~]# awk -vn1=$x -vn2=$y 'BEGIN{print n1/n2}'
3.33333
[root@web01 ~]# awk 'BEGIN{print '$x'/'$y'}'
3.33333
[root@web01 ~]# awk "BEGIN{print $x/$y}"
3.33333
https://www.processon.com/view/link/5becee35e4b0d74dc540e690
老男孩教育-awk命令执行过程-完整
root@web01 ~]# head -5 /etc/passwd >passwd.txt
[root@web01 ~]#
[root@web01 ~]# cat passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# awk -vRS="/" '{print NR,$0}' passwd.txt
1 root:x:0:0:root:
2 root:
3 bin
4 bash
bin:x:1:1:bin:
5 bin:
6 sbin
7 nologin
daemon:x:2:2:daemon:
8 sbin:
9 sbin
10 nologin
adm:x:3:4:adm:
11 var
12 adm:
13 sbin
14 nologin
lp:x:4:7:lp:
15 var
16 spool
17 lpd:
18 sbin
19 nologin
[root@web01 ~]# awk -vRS="/|\n" '{print NR,$0}' passwd.txt
1 root:x:0:0:root:
2 root:
3 bin
4 bash
5 bin:x:1:1:bin:
6 bin:
7 sbin
8 nologin
9 daemon:x:2:2:daemon:
10 sbin:
11 sbin
12 nologin
13 adm:x:3:4:adm:
14 var
15 adm:
16 sbin
17 nologin
18 lp:x:4:7:lp:
19 var
20 spool
21 lpd:
22 sbin
23 nologin
[root@web01 ~]#
统计 passwd.txt中每个单词出现的次数
[root@web01 ~]# cat passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@web01 ~]# awk -vRS='[:/ 0-9\n]+' '{print $0}' passwd.txt|sort |uniq -c
3 adm
1 bash
4 bin
2 daemon
2 lp
1 lpd
4 nologin
3 root
5 sbin
1 spool
2 var
5 x
[root@web01 ~]# awk -vRS='[^a-zA-Z]+' '{print $0}' passwd.txt|sort |uniq -c
3 adm
1 bash
4 bin
2 daemon
2 lp
1 lpd
4 nologin
3 root
5 sbin
1 spool
2 var
5 x
oot@web01 ~]# awk -F: '{print $1,$3}' passwd.txt
root 0
bin 1
daemon 2
adm 3
lp 4
[root@web01 ~]# awk -vFS=":" '{print $1,$3}' passwd.txt
root 0
bin 1
daemon 2
adm 3
lp 4
awk -F: '{print $NF":"$6":"$5":"$4":"$3":"$2":"$1}' passwd.txt
awk-调换 /etc/passwd第1列和最后一列的内容-说明
https://www.processon.com/view/link/5aa1df8ae4b0b089b9e60cbd
awk -F: -vOFS=: '{print $NF,$2,$3,$4,$5,$6,$1}' passwd.txt
awk -F: -vOFS=: '{tmp=$NF;$NF=$1;$1=tmp;print }' passwd.txt
awk -F: -vOFS=: '{tmp=$NF;$NF=$1;$1=tmp }1' passwd.txt
awk -F: -vOFS=: '{tmp=$NF;$NF=$1;$1=tmp }1{print $0}' passwd.txt
[root@web01 ~]# sed -r 's#(^.*)(:x.*:)(.*)#\3\2\1#g' passwd.txt
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
[root@web01 ~]# sed -r 's#(^[^:]+)(:.*:)(.*)#\3\2\1#g' passwd.txt
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
egrep '[:]+' passwd.txt
egrep '[^:]+' passwd.txt
egrep '^[^:]+' passwd.txt
[root@web01 ~]# #awk -F: '$3>1 && $3<1000' /etc/passwd
[root@web01 ~]# #awk -F: '$3>1 && $3<1000{print }' /etc/passwd
[root@web01 ~]# #取出第5列等于root的行
[root@web01 ~]# awk -F: '$5==root' /etc/passwd
[root@web01 ~]# #取出第5列等于root的行
[root@web01 ~]# awk -F: '$3==0' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@web01 ~]# awk -F: '$5==root' /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
rsync:x:1112:1112::/home/rsync:/bin/bash
oldboy01:x:1113:1113::/home/oldboy01:/bin/bash
oldboy02:x:1114:1114::/home/oldboy02:/bin/bash
oldboy03:x:1115:1115::/home/oldboy03:/bin/bash
oldboy04:x:1116:1116::/home/oldboy04:/bin/bash
oldboy05:x:1117:1117::/home/oldboy05:/bin/bash
oldboy06:x:1118:1118::/home/oldboy06:/bin/bash
oldboy07:x:1119:1119::/home/oldboy07:/bin/bash
oldboy08:x:1120:1120::/home/oldboy08:/bin/bash
oldboy09:x:1121:1121::/home/oldboy09:/bin/bash
oldboy10:x:1122:1122::/home/oldboy10:/bin/bash
[root@web01 ~]#
[root@web01 ~]# awk -F: '$5=="root"' /etc/passwd
root:x:0:0:root:/root:/bin/bash
找出access.log中 以.png 结尾的行
找出access.log中 以.png 结尾的第7列第9列和第10列
$http_referer 从哪里跳转过来的
[root@web01 ~]# awk '$7~/\.png$/{i++}END{print i}' access.log
34783
[root@web01 ~]# awk '$7~/\.png$/' access.log |wc -l
34783
[root@web01 ~]# awk '$7~/\.png$/{i++}END{print i}' access.log
34783
统计uri是.png结尾的行中 一共使用了多少流量(第10列求总和)
i=i+1
[root@web01 ~]# awk '$7~/\.png$/{i+=$10}END{print i/1024^3"GB"}' access.log
1.39346GB
[root@web01 ~]# awk '{i+=$10}END{print i/1024^3"GB"}' access.log
2.30828GB