awk 
输入分隔符(-F、FS)、输出分隔符(OFS)
awk里引用shell变量
一. awk和shell变量交换的问题 awk和shell变量交换的问题 
1、使用 -v选项
2、使用双引号,但是awk内部的$01 等 1等 1 等 
3、使用单引号,将变量引起来,然后前面加一个$符号再次引用变量的值,相当于取2次值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@cPen_A ~]# sg="panjinhao"  [root@cPen_A ~]# echo  $sg  panjinhao [root@cPen_A ~]# echo |awk '{print $sg}'  [root@cPen_A ~]# echo |awk -v bsg=$sg  '{print bsg}'  panjinhao [root@cPen_A ~]# ls |awk -v bsg=$sg  '{print bsg}'  panjinhao			 panjinhao …… panjinhao [root@cPen_A lianxi]# vim test2.sh  awk -v var=$1  -F: '$1==var{print NR,$0}'  /etc/passwd [root@cPen_A lianxi]# bash test2.sh root 1 root:x:0:0:root:/root:/bin/bash [root@cPen_A lianxi]# bash test2.sh sanchuang 21 sanchuang:x:1000:1000::/home/sanchuang:/bin/bash [root@cPen_A lianxi]# mv ="zhangjie"  [root@cPen_A lianxi]# useradd zhangjie_123 [root@cPen_A lianxi]# cat  /etc/passwd|awk -F: "/^$mv /{print \$1,\$3}"  zhangjie_123 12358 [root@cPen_A lianxi]# sg=3 [root@cPen_A lianxi]# awk -F: '/root/{print $1,$' $sg '}'  /etc/passwd root 0 operator 11 
二. 进程和进程之间通信的方式 1、共享内存
2、信号量
3、信号
4、管道
5、队列
6、Socket
1 2 3 4 5 6 7 [root@cPen_A lianxi]# cat  /etc/shadow 第2个字段:密码字段 *操作系统自带的,没有密码的 !!用户建的,没有密码的 提示:密码字段为*、!!表示没有设置密码;密码字段为空说明密码被清除。 [root@cPen_A lianxi]# cat  /etc/shadow|awk -F: 'BEGIN{i=0}length($2)<=2{print $1,"没有设置密码";i++}END{print "一共有"i"个用户"}'  
三. awk内置函数 awk内置的函数:
 length()
 int()
 sqrt()
 system()
String Functions
 sub()
 index()
 length()
 split()
Numeric Functions
yum install python3 安装python3
1 2 3 4 5 6 7 8 [root@cPen_A lianxi]# echo  |awk '{print rand()}'  0.237788 [root@cPen_A lianxi]# echo  |awk '{print rand()*100}'  23.7788 [root@cPen_A lianxi]# echo  |awk '{print int(rand()*100)}'  23 
四. 流控 流控:流程控制 control flow
for
while
case
if
1 2 3 4 5 6 7 8 9 10 11 if 语句单分支 [root@cPen_A lianxi]# awk -F: '{if($1 ~ /\<...\>/)print $0}'  /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin [root@cPen_A lianxi]# awk -F: '$1 ~ /\<.{3}\>/{print $0}'  /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin 双分支 [root@cPen_A lianxi]# awk -F: '{if($1 ~ /\<...\>/)print $0;else print "不符合要求"}'  /etc/passwd 不符合要求 bin:x:1:1:bin:/bin:/sbin/nologin 
1 2 3 4 5 6 7 8 9 10 11 12 13 /etc/passwd $3 是uid 用户的编号如果用户的编号是0  --> 管理员 1~999  --> 程序用户 大于1000 --> 普通用户 最后统计出有多少管理员,多少程序用户,多少普通用户? ----------------------------------------------------- [root@cPen_A ~]# awk -F: 'BEGIN{x=0;y=0;z=0}{if($3=="0") {print $1,"管理员";x++} else if($3>=1 && $3<=999) {print $1,"程序用户";y++} else  {print $1,"普通用户";z++}}END{print "管理员"x,"程序用户"y,"普通用户"z}'  /etc/passwd root 管理员 bin 程序用户 …… 管理员1 程序用户25 普通用户40 
五. awk的for循环、数组 
awk难点:
正则表达
if
内置函数
内置变量
for,数组array
六. sed sed是什么?what --> text stream editor
sed是一种支持正则表达式的非交互式流编工具(stream editor)
 脚本中修改文本或者文本替换的最佳工具
交互式:一问一答。比如python3里敲命令
2个空间 pattern space --> 处理数据的地方 --> 处理一行数据后,模式空间会清空 hold space --> 临时存放数据的地方 
把pattern space放到hold space 命令:h、H
把hold space放到pattern space 命令:g、G
#注:性能意识,sed在内存里运行,比磁盘速度快
#注:容量意识
1 2 3 4 [root@cPen_A lianxi]# sed -i 's/xiaomi/redmi/g'  test.txt  [root@cPen_A lianxi]# cat  chen |sed 's/xiaomi/redmi/g'  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@cPen_A lianxi]# cat  -n /etc/passwd|head  |tail  -6      5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin      6	sync :x:5:0:sync :/sbin:/bin/sync      7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown      8	halt:x:7:0:halt:/sbin:/sbin/halt      9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin     10	operator:x:11:0:operator:/root:/sbin/nologin [root@cPen_A lianxi]# cat  -n /etc/passwd|sed -n '5,10p'       5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin      6	sync :x:5:0:sync :/sbin:/bin/sync      7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown      8	halt:x:7:0:halt:/sbin:/sbin/halt      9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin     10	operator:x:11:0:operator:/root:/sbin/nologin 
sed的p命令示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 = :输出行号 p命令输出的时候: 连续的行 [root@localhost lianxi]# cat  /etc/passwd|sed -n '1,5p'  不连续的行 [root@localhost lianxi]# cat  /etc/passwd|sed -n '10p;20p'  示例:sed的p命令示例 sed -n ‘行号1,行号2p’ 输出文件 [root@localhost lianxi]# cat  /etc/passwd|sed -n '1,5p' 			 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@localhost lianxi]# cat  /etc/passwd|sed -n '=;1,5p' 		 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 7 …… 14 [root@localhost lianxi]# cat  -n /etc/passwd|sed -n '1,$p' 		 [root@localhost lianxi]# cat  -n /etc/passwd|sed -n '5,+5p' 		      5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin      6	sync :x:5:0:sync :/sbin:/bin/sync      7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown      8	halt:x:7:0:halt:/sbin:/sbin/halt      9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin     10	operator:x:11:0:operator:/root:/sbin/nologin [root@localhost lianxi]# cat  -n /etc/passwd|sed -n '5,100!p' 		      1	root:x:0:0:root:/root:/bin/bash      2	bin:x:1:1:bin:/bin:/sbin/nologin      3	daemon:x:2:2:daemon:/sbin:/sbin/nologin      4	adm:x:3:4:adm:/var/adm:/sbin/nologin 	 	 [root@localhost lianxi]# cat  -n /etc/passwd|sed -n '1~2p' 	      1	root:x:0:0:root:/root:/bin/bash      3	daemon:x:2:2:daemon:/sbin:/sbin/nologin      5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin      7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown      9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin     11	games:x:12:100:games:/usr/games:/sbin/nologin     13	nobody:x:99:99:Nobody:/:/sbin/nologin     15	dbus:x:81:81:System message bus:/:/sbin/nologin     17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin     19	chrony:x:998:996::/var/lib/chrony:/sbin/nologin     21	chenpeng:x:1001:1001::/home/chenpeng:/bin/bash     23	nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin [root@localhost lianxi]# cat  -n /etc/passwd|sed -n '2~2p' 		      2	bin:x:1:1:bin:/bin:/sbin/nologin      4	adm:x:3:4:adm:/var/adm:/sbin/nologin      6	sync :x:5:0:sync :/sbin:/bin/sync      8	halt:x:7:0:halt:/sbin:/sbin/halt     10	operator:x:11:0:operator:/root:/sbin/nologin     12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin     14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin     16	polkitd:x:999:998:User for  polkitd:/:/sbin/nologin     18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin     20	mysql:x:1000:1000::/home/mysql:/sbin/nologin     22	redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin [root@localhost lianxi]# num1=6 [root@localhost lianxi]# num2=10 [root@localhost lianxi]# cat  -n /etc/passwd|sed -n "${num1} ,${num2} p"       6	sync :x:5:0:sync :/sbin:/bin/sync      7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown      8	halt:x:7:0:halt:/sbin:/sbin/halt      9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin     10	operator:x:11:0:operator:/root:/sbin/nologin [root@localhost lianxi]# cat  -n /etc/passwd|sed -n '' ${num1} ,${num2} 'p'       6	sync :x:5:0:sync :/sbin:/bin/sync      7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown      8	halt:x:7:0:halt:/sbin:/sbin/halt      9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin     10	operator:x:11:0:operator:/root:/sbin/nologin ---------------------------------------------------------- [root@localhost lianxi]# cat  /etc/passwd|sed -n '/bash/p'  root:x:0:0:root:/root:/bin/bash chenpeng:x:1001:1001::/home/chenpeng:/bin/bash [root@localhost lianxi]# cat  /etc/passwd|egrep "bash"  root:x:0:0:root:/root:/bin/bash chenpeng:x:1001:1001::/home/chenpeng:/bin/bash [root@localhost lianxi]# cat  /etc/passwd|awk '/bash/'  root:x:0:0:root:/root:/bin/bash chenpeng:x:1001:1001::/home/chenpeng:/bin/bash [root@localhost lianxi]# cat  /etc/ssh/ssh_config |sed -n '/^#/p'  [root@localhost lianxi]# cat  /etc/ssh/ssh_config |sed -n '/^#/!p'  [root@localhost lianxi]# cat  /etc/ssh/ssh_config |sed -r -n '/^#|^$/!p' 	 [root@localhost lianxi]# cat  /etc/ssh/ssh_config |egrep -v '^#|^$'  [root@localhost lianxi]# df  -h|egrep "/$"  /dev/mapper/centos-root   17G  9.9G  7.2G   58% / [root@localhost lianxi]# df  -h|sed -n '/\/$/p'  /dev/mapper/centos-root   17G  9.9G  7.2G   58% / [root@localhost lianxi]# cat  /etc/passwd|sed -n '/^[a-Z]/p'  [root@localhost lianxi]# cat  /etc/passwd|sed -n '/^[^a-Z]/p'  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 题目:截取nginx的access.log文件里3月18号15:30:00 -- 16:48:10时间段内的所有访问日志 [root@cPen_A lianxi]# service firewalld stop	 [root@cPen_A lianxi]# systemctl disable  firewalld	 [root@cPen_A nginx]# tail  -f access.log		 192.168.0.17 - - [09/Jan/2021:16:36:03 +0800] "GET /favicon.ico HTTP/1.1"  404 3650 "http://192.168.0.118/"  "Mozilla/5.0 (Linux; Android 10; PCT-AL10; HMSCore 5.1.0.300; GMSCore 20.26.14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 HuaweiBrowser/11.0.5.304 Mobile Safari/537.36"  "-"  [root@cPen_A nginx]# pwd  /var/log/nginx				 [root@cPen_A nginx]# ls  access.log  access.log-20201202.gz  error.log  error.log-20201202.gz [root@cPen_A nginx]# cat  access.log | awk -F'[()]'  '{print $2}' |sort |uniq  -c|sort  -nr      13 Windows NT 10.0; WOW64			       4 Linux; Android 10; PCT-AL10; HMSCore 5.1.0.300; GMSCore 20.26.14 --------------------------------------------------------------------------- [09/Jan/2021:16:32:46 +0800] --> 09/Jan/2021:16:32:46 [09/Jan/2021:16:33:07 +0800] --> 09/Jan/2021:16:32:46 [root@cPen_A nginx]# cat  access.log|sed -n '/09\/Jan\/2021:16:32:46/,/09\/Jan\/2021:16:33:07/p'  [root@cPen_A nginx]# cat  access.log|sed -r -n '/09\/Jan\/2021:16:(3[789]|4[0-9]|5[01]):(0[1-9]|[1-5][0-9])/p'  0[1-9]|[1-5][0-9] 
sed的d命令示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 sed的d命令示例 删除操作可以根据行号和匹配模式进行操作 [root@cPen_A nginx]# cat  /etc/passwd|sed '/denghui/d'  [root@cPen_A lianxi]# sed -i '/redmi/d'  test.txt  [root@cPen_A lianxi]# sed -i '2d'  test.txt 	 sed查找方式: 	1、根据行号 	2、根据模式 -->正则表达式=字符+特殊符号 	3、根据字符串 [root@cPen_A lianxi]# sed -i '4a huawei'  test.txt  [root@cPen_A lianxi]# sed -i '4i apple'  test.txt  [root@cPen_A lianxi]# sed -i '/VIVO/i OPPO'  test.txt  [root@cPen_A lianxi]# sed -i 's/VIVO/& APPLE/'  test.txt  [root@cPen_A lianxi]# sed -i 's/huawei/sanchuang/g'  test.txt  sed的命令: 	p 	d 	a 	i 	s 	c 	r 	w