-
- M.Tansley 05/99 48311 Green 8 40 44
- L.Lulu 06/99 48317 green 9 24 26
- P.Bunny 02/99 48 Yellow 12 35 28
- J.Troll 07/99 4842 Brown-3 12 26 26
- L.Tansley 05/99 4712 Brown-2 12 30 28
-
- ***【条件操作】***
-
- awk 匹配
- 1、模糊匹配
-
- J.Troll 07/99 4842 Brown-3 12 26 26
- L.Tansley 05/99 4712 Brown-2 12 30 28
- 2、精确匹配
-
- J.Troll 07/99 4842 Brown-3 12 26 26
-
- awk 不匹配
-
- M.Tansley 05/99 48311 Green 8 40 44
- L.Lulu 06/99 48317 green 9 24 26
- P.Bunny 02/99 48 Yellow 12 35 28
-
-
- M.Tansley 05/99 48311 Green 8 40 44
- L.Lulu 06/99 48317 green 9 24 26
- P.Bunny 02/99 48 Yellow 12 35 28
- (默认情况下,awk将会打印所有匹配记录,因此这里不必加入动作部分!)
-
- awk小于
-
- M.Tansley 05/99 48311 Green 8 40 44 M.Tansley Try better at next comp
- L.Lulu 06/99 48317 green 9 24 26 L.Lulu Try better at next comp
-
- awk 小于等于
-
- M.Tansley 05/99 48311 Green 8 40 44
- L.Lulu 06/99 48317 green 9 24 26
- J.Troll 07/99 4842 Brown-3 12 26 26
-
- awk 匹配大小写
-
- M.Tansley 05/99 48311 Green 8 40 44
- L.Lulu 06/99 48317 green 9 24 26
-
- awk 任意字符(第四个字符是a的行)
-
- M.Tansley 05/99 48311 Green 8 40 44
- L.Tansley 05/99 4712 Brown-2 12 30 28
-
- awk 或者
-
- P.Bunny 02/99 48 Yellow 12 35 28
- J.Troll 07/99 4842 Brown-3 12 26 26
- L.Tansley 05/99 4712 Brown-2 12 30 28
-
- awk 行首
-
-
- awk 逻辑关系 && || !
- 1、与逻辑
-
- L.Lulu 06/99 48317 green 9 24 26
-
- 2、或逻辑
-
- L.Lulu 06/99 48317 green 9 24 26
- J.Troll 07/99 4842 Brown-3 12 26 26
- L.Tansley 05/99 4712 Brown-2 12 30 28
-
- 3、非逻辑
-
- M.Tansley 05/99 48311 Green 8 40 44
- P.Bunny 02/99 48 Yellow 12 35 28
- L.Tansley 05/99 4712 Brown-2 12 30 28
-
- ***【awk内置变量】
- ARGC(命令行参数个数) AWK脚本参数个数
- ARGV(命令行参数排列) ARGV[n]
- ENVIRON(支持系统环境变量设置)
- FILENAME(awk浏览的文件名)告知系统目前正在浏览的实际文件
- FNR(浏览文件的记录数)
- FS(域分割符) -F
- NF(浏览记录的域个数) 支持记录域个数
- NR(已读的记录数)
- OFS(输出域分割符) 默认为空格,如果想设置为
- ORS(输出记录分割符) 默认为新行 \n
- RS(控制记录分割符) 默认为新行 \n
-
- 1、NF。NR。FILENAME
-
- 7 1 M.Tansley 05/99 48311 Green 8 40 44 (域个数,已读记录数)
- 7 2 L.Lulu 06/99 48317 green 9 24 26
- 7 3 P.Bunny 02/99 48 Yellow 12 35 28
- 7 4 J.Troll 07/99 4842 Brown-3 12 26 26
- 7 5 L.Tansley 05/99 4712 Brown-2 12 30 28
- file (文件名)
-
-
- J.Troll 07/99 4842 Brown-3 12 26 26
- L.Tansley 05/99 4712 Brown-2 12 30 28
-
-
- gls-makebridge
-
- ***【awk操作符】***
- = += *= /= %= ^= 赋值操作符
- ? 条件表达操作符
- || && ! 或与非
- ~ !~ 匹配与不匹配
- < <= == != >> 关系操作符
- + - * / % ^ 算数操作符
- + + -- 前缀和后缀
-
- 1、设置变量名
-
- M.Tansley is belt Green
- L.Lulu is belt green
- P.Bunny is belt Yellow
- J.Troll is belt Brown-3
- L.Tansley is belt Brown-2
-
-
- P.Bunny is belt Yellow
-
- 2、域值比较
- a、在BEGIN中给变量赋值 (很有益的)
- b、在关系操作中使用实际数值 (使用关系操作必须用圆括号括起来)
-
-
- L.Lulu 06/99 48317 green 9 24 26
- J.Troll 07/99 4842 Brown-3 12 26 26
-
-
- L.Lulu 06/99 48317 green 9 24 26
- J.Troll 07/99 4842 Brown-3 12 26 26
-
- 3、修改数值域取值
- 找出名字为M.Tansley的人,将他的成绩减1.
-
- M.Tansley 39 44 (之前为40,现在为39)
- L.Lulu 24 26
- P.Bunny 35 28
- J.Troll 26 26
- L.Tansley 30 28
-
- 4、修改文本域
- 将J.Troll修改为J.L.Troll (字符串要是用双秒号“”)
-
- M.Tansley
- L.Lulu
- P.Bunny
- J.L.Troll (已经改过了)
- L.Tansley
-
- 5、只显示修改过的记录 (注意是花括号,合并命令)
-
- J.L.Troll
-
- 6、创建新的输出域
- 创建域8保存目前级别分与域最高级别分的减法值
-
- Name Differents
- M.Tansley 4
- L.Lulu 2
-
- 7、增加列值 (统计总分)
-
- 如果只想看结果而不打印其它的,那就这样
-
-
- 8、文件长度增加 (查看文件名及对应的文件大小,最后统计总大小)
-
- RH255-10_系统监控和日志.pdf 224733
- RH255-11_集中和安全存储.pdf 279593
- RH255-12_通过SSL封装的WEB服务.pdf 403115
- RH255-13_WEB服务器其他配置.pdf 221958
- RH255-14_基本SMTP配置.pdf 320628
- RH255-15_仅缓存DNS服务器.pdf 213914
- RH255-16_通过NFS共享文件.pdf 228612
- RH255-17_通过CIFS共享文件.pdf 215369
- RH255-18_通过FTP共享文件.pdf 128581
- RH255-19_对引导过程进行故障排除.pdf 200583
- RH255-1_从教室环境入门.pdf 242201
- RH255-2_增强用户安全.pdf 264396
- RH255-3_BASH脚本编程和工具.pdf 340625
- RH255-4_通过GNUPG保护文件安全.pdf 185014
- RH255-5_包管理.pdf 272382
- RH255-6_网络监控.pdf 203533
- RH255-7_高级网络配置.pdf 255007
- RH255-8_保护网络通信.pdf 317654
- RH255-9_NTP服务器配置.pdf 189784
- total KB: 4707682
-
- ***【内置的字符串函数】***
- gsub(r,s) 在整个$0中用s替代r
- gsub(r,s,t) 在整个t中用s替代r
- index(s,t) 返回s中字符串t的第一位置
- length(s) 返回s长度
- match(s,r) 测试s是否包含匹配r的字符串
- split(s,a,fs) 在fs上将s分成序列a
- sprint(fmt,exp) 返回经fmt格式化后的exp
- sub(r,s) 用$0中最左边最长的子字符串代替s
- substr(s,p) 返回字符串s中从p开始的后缀部分
- substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
-
- gsub函数有点类似于sed查找和替换。第一个函数作用于记录$0,第二个函数gsub函数允许指定目标。未指定目标则默认为
- $0.
- index(s,t)函数返回目标字符串s中查询字符串t的首位置.length函数返回字符串s字符长度.
- split使用域分割符fs将字符串s划分为指定序列a。
-
- 1、gsub (目标模式/,替换为/)
-
- J.Troll 07/99 4899 Brown-3 12 26 26
-
- 2、index (必须用双引号将字符串括起来)
-
- 4
-
- 3、length (返回所需字符串的长度)
-
- 7 J.Troll
-
- 14
-
- 4、match (测试目标字符串中是否包含查找字符的一部分)
-
- 0
-
- 4
-
- 4
-
- 5、split (返回字符串数组元素个数)
-
- 3
-
- 6、substr (按照起始位置及长度返回字符串的一部分)
-
- 利用这个截取可以小试一下截取ip:
- a、
- br0 Link encap:Ethernet HWaddr 00:1E:37:D2:9F:FD
- inet addr:192.168.0.24 Bcast:192.168.0.255 Mask:255.255.255.0
- inet6 addr: fe80::21e:37ff:fed2:9ffd/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:402571 errors:0 dropped:0 overruns:0 frame:0
- TX packets:202353 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:0
- RX bytes:386613583 (368.7 MiB) TX bytes:17539566 (16.7 MiB)
-
- b、
- 192.168.0.24
-
-
- Tansley
- Lulu
- Bunny
- Troll
- Tansley
-
-
- GOOD MEN (将字符串str从第七位开始截取,结果是”GOOD MEN“)
-
- 8、从shell中想awk传入字符串
-
- 13
-
- 8
-
- 4
-
- 设置一文件名为变量,管道输出到awk.
-
-
- mydoc
-
-
- ***【字符串屏蔽序列】***
- \b 退格键 \t tab键 \f 走纸换页
- \ddd 八进制值 \n 换行 \c 任意其它字符
- \r 回车键
-
-
-
- May Day
-
- May Day (\104为D的八进制ASCII码,\141为a,\171为y)
-
- ***【awk输出函数printf】***
- [修饰符]
- - 左对齐 Width 域的步长,用0表示0步长 .prec 最大字符串长度,或小数点右边的位数
- [格式]
- %c ASCII码字符 %d 整数 %e 浮点数,科学计数法
- %f 浮点数,如1.23 %g awk决定使用哪种浮点数 %o 八进制数
- %s 字符串 %x 十六进制数
-
- 1、字符转换
-
- A
-
-
- 999.000000
-
- 2、格式化输出
- 要求名字左对齐,15个字符长度,后跟序列号。
-
- M.Tansley 48311 8 ($1-$3间距20个字符)
- L.Lulu 48317 9
- P.Bunny 48 12
- J.Troll 4842 12
- L.Tansley 4712 12
- 修饰一下:
-
- Name S Number (多一行注释)
- M.Tansley 48311 8
- L.Lulu 48317 9
- P.Bunny 48 12
- J.Troll 4842 12
- L.Tansley 4712 12
-
- 3、向一行awk命令传值
- 命令: awk 命令变量=输入文件值
-
- M.Tansley 05/99 48311 Green 8 40 44
- L.Lulu 06/99 48317 green 9 24 26
-
-
- /dev/sda1 35240 (查看可用空间小于65M的分区)
-
-
- root is logged on
-
-
- root you are connected to tty1 (效果等价于上面,这里是传递参数)
-
- 4、awk脚本文件
-
-
- ! /bin/gawk -f
-
-
-
- BEGIN{
- print "Student Date Member No.Grade Age Points Max"
- print "Name Joined Gained Point Available"
- print "================================================================"
-
- }
-
- (tot+=$6)
-
-
- END{print "Club student total points: " tot
- print "Average Club Student points: " tot/NR}
-
- 5、在awk中使用FS变量
-
- !/usr/bin/awk -f
- BEGIN{
- FS=":"}
- {print $1,"\t",$5}
-
- 6、向awk脚本传值
- awk script_file var=value input_file
- =========================
-
-
- !/usr/bin/awk -f
- NF!=MAX{
- print("line " NR "does not have "MAX" fields")}
-
-
- =========================
-
- !/usr/bin/awk -f
- {if($5 < age)
- print $0}
-
-
- =========================
-
-
- !/usr/bin/awk -f
- BEGIN{
- OFS="\t" ;
- print "name" "\t\t","bytes","blocks\n"
- print "=============================="}
- {print $2,"\t\t",$1*512,$1}
-
-
- =========================
-
- 9、awk数组
-
-
-
- BEGIN{
- record="123#456#789";
- split(record,myarray,"#")}
- END{for(i in myarray) {print myarray[i]}}
-
-
- =========================
2012-3-20练习笔记