awk讲义-1-快速入门
awk讲义-1-快速入门 一、目标问题:
- 1.统计各个省份中城市的数量(一维数组)
- 2.统计城市中区县数量,要求输出格式:省份 城市 区县数量(二维数组)
- 3.求两个文件的交集
- 4.省市和市区两个文件进行join操作
- 5.求两个文件的并集
- 6.求两个文件的差集
awk '$3 > 0 { print $1, $2 * $3 }' emp.data
【awk讲义-1-快速入门】2.哪些员工在偷懒(工作时间为0)
awk '$3 == 0 { print $1 }' emp.data
三、awk程序结构 1.模式–动作即pattern { action } 2.如果输入多个文件 或者没有输入文件? 没有输入文件的话会把awk程序应用在控制台的输入上。
也可以与shell的管道一起使用
3.变量与内置变量 自定义变量:
1.通过-v varname=value 变量名区分字符大小写。
优点:可以直接引用shell中的变量
2.在program中直接定义
3.数组与多维数组(hashmap):
Awk 的数组与大多数其他语言最大的不同点是, 数组元素的下标是字符串. 这个特性使得
awk 具有关联内存的能力, 也由于这个原因, awk 的数组称为 关联数组 (associative arrays).
多维数组 (Multidimensional Arrays). Awk 不直接支持多维数组, 但是它利用一维数组来
近似模拟多维数组
在 awk 内部, 下标其实是以 53
字符串的形式存储的, 字符串具有形式 1 SUBSEP 1, 1 SUBSEP 2 等等. 内建变量 SUBSEP 用
于分隔下标的各个构成成分, 它的默认值是 "\034"
测试一个多维下标是否是某个数组的成员,可以这样写
if ((i,j) in arr) ...
遍历一个这样的数组, 可以这样写:
for (k in arr) ...
单独地访问下标的某个成分,可以使用split(k, x, SUBSEP)
实战:
1.统计各个省份中城市的数量(一维数组)
2.统计城市中区县数量,要求输出格式:省份 城市 区县数量(二维数组)
内置变量:
FS:输入字段分隔符, 默认为空白字符OFS:输出字段分隔符, 默认为空白字符RS:输入记录分隔符(输入换行符), 指定输入时的换行符ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量NR:行号,当前处理的文本行的行号。FNR:各文件分别计数的行号FILENAME:当前文件名ARGC:命令行参数的个数ARGV:数组,保存的是命令行所给定的各参数
’pattern{ action }’并不被看做是参数,awk被看做为参数。
4.流程控制语句 If-Else语句
计算每小时工资多于 $6.00 的雇员的总报酬与平均报酬.
$2 > 6 { n = n + 1;
pay = pay + $2 * $3 }
END{ if (n > 0)
print n, "employees, total pay is", pay,
"average pay is", pay/n
else
print "no employees are paid more than $6/hour"
}
附录 参考资料:The AWK Programming Language(作者: Alfred V. Aho / Brian W. Kernighan / Peter J. Weinberger)
推荐阅读
- Linux-韦东山|linux-1-单片机程序对比Linux程序
- linux|shell编程--三剑客之awk
- 2018-1-9好生意的标准
- 德慧智经典诵读讲义1民族的复兴需要慧智双运型教育
- 小彭的S持续力晨读第七期第9天Day2018-1-1
- 2020-1-9《双向养育》chapter|2020-1-9《双向养育》chapter 3
- 2021-1-2晨间日记
- 2019-1-14
- 感恩日记2020-1-14
- 2018-1-4星期四