awk
第一条命令探路
原 /etc/passwd 数据:

awk -F’:’ ‘{print $1,$2,$6}’ /etc/passwd

意思很明显:将/etc/passwd文件中的数据,先以":"分割,然后取第1、第2、第6列,打印出来。
-F’:’ 指定冒号为分割符
==’{print $1,$2,$6}’==脚本代码块
执行脚本中的 BEGIN \ END模块
一般地,对每个输入行,awk 都会将脚本代码块执行一遍。然而在很多编程情况下,我们希望在整个过程中只执行一次初始化代码和结束收尾代码,也可以不用。对应的在awk中指的就是BEGIN \ END模块。通常情况下,使用BEGIN 模块初始化 FS(字段分隔符)变量、打印页眉或初始化其它全局变量,而END模块则用来做汇合计算、打印页脚或其他释放资源的工作。
运算符
| 运算符 | 描述 |
|---|---|
| = += -= *= /= %= ^= **= | 赋值语句 |
| || | 逻辑或 |
| && | 逻辑与 |
| ~ !~ | 匹配正则表达式和不匹配正则表达式 |
| < <= > >= != == | 关系运算符 |
| + - | 加,减 |
| * / & | 乘,除,求余 |
| + - ! | 加,减,逻辑非 |
| ^ *** | 求幂 |
| ++ – | 自加,自减 |
| $ | 字段引用 |
| 空格 | 字符串链接符 |
| ?: | 三目运算符 |
| In | 数组中是否存在某键值 |
使用举例:
- awk ‘BEGIN{a = 5;a += 5;print a}’

- awk ‘BEGIN{a = 1;b = 2;print (a > 2 && b > 1,a = 1 || b > 1)}’

- awk ‘BEGIN{a=“100testaaa”;if(a~/100/){print “ok”}}’

- awk ‘BEGIN{a=11;if(a>=9){print “ok”}}’

- awk ‘BEGIN{a=“b”;print a++,++a}’

- awk ‘BEGIN{a=“b”;print a==“c”?“ok”:“err”}’

内置变量
| 变量名 | 属性 |
|---|---|
| $0 | 当前整行 |
| $1~$n | 当前行的第 n 个字段 |
| FS | 输入字段分隔符,默认是空格 |
| RS | 输入记录分割符,默认为换行符 |
| NF | 当前行中的字段个数,也就是有多少列 |
| NR | 已经读出的记录数,就是行号,从 1 开始 |
| OFS | 输出字段分隔符,默认也是空格 |
| ORS | 输出的记录分隔符,默认为换行符 |
使用举例:
- awk ‘BEGIN{FS="\t"}{print $1,$2,$3}’ data.txt
FS指定tab为分隔符

- awk ‘BEGIN{FS="[[:space:]+]"}{print $1,$2,$3}’ data.txt
默认空格

- awk ‘BEGIN{FS="[[:space:]+]"}NF=2{print $1,$2,$3}’ data.txt
awk ‘BEGIN{FS="[[:space:]+]"}NF=3{print $1,$2,$3}’ data.txt
NF指定列的数量

- awk ‘BEGIN{FS="[[:space:]+]"}NR&

本文介绍了Shell脚本中的三剑客——awk, sed, grep的实战应用。详细讲解了awk的字段处理、运算符、内置变量、正则表达式及其在数据处理中的用法;sed的定位、命令、选项和常见操作;grep的模式匹配、选项和统计功能。通过实例展示了这三个工具的强大功能。"
1716550,230260,使用UIP构建灵活的MVC流程控制,"['UI设计', 'MVC框架', '流程管理', 'XML', '状态持久化']
最低0.47元/天 解锁文章
552

被折叠的 条评论
为什么被折叠?



