awk讲义-1-快速入门
awk讲义-1-快速入门
一、目标问题:
- 1.统计各个省份中城市的数量(一维数组)
- 2.统计城市中区县数量,要求输出格式:省份 城市 区县数量(二维数组)
- 3.求两个文件的交集
- 4.省市和市区两个文件进行join操作
- 5.求两个文件的并集
- 6.求两个文件的差集
二、入门案例
1.每位雇员的名字以及他们的报酬 (每小时工资乘以工作时长), 而雇员的工作时长必须大于零
awk '$3 > 0 { print $1, $2 * $3 }' emp.data
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)
awk讲义-1-快速入门的更多相关文章
- [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门
[.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...
- Linux快速入门03-系统管理
这部分将涉及常用的各类linux命令和一些系统高级管理特性,尤其是shell script的创建,这部分在系统自动化运维时会很有作用. Linux系列文章 快速入门系列--Linux--01基础概念 ...
- Java Web快速入门——全十讲
Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...
- 私有仓库GitLab快速入门篇
私有仓库GitLab快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 安装文档请参考官网:https://about.gitlab.com/installation/#ce ...
- ELK快速入门(一)基本部署
ELK快速入门一-基本部署 ELK简介 什么是ELK?通俗来讲,ELK是由Elasticsearch.Logstash.Kibana 三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同 ...
- Polar码快速入门
Polar码快速入门 本科生在学习极化码时,并不是件简单的事情.网上极化码的资料很少,而且基本上都是较难的论文.这篇文章是用来帮你快速入门极化码. Poalr码背景 2015 年,国际电信联盟无线通信 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
随机推荐
- CF1229D - Wojtek and Card Tricks
做法一 首先将排列用康托展开映射到整数,并且预处理出排列之间乘法的结果,复杂度 \(\mathcal{O}(k(k!) ^ 2)\). 枚举左端点,有可能分段的右端点至多只有 \(k!\) 个,不妨将 ...
- Atcoder ARC-060
ARC060(2020.7.8) A 背包板子 B 首先感觉这个东西应该不能直接 \(O(1)\) 算出来,那么复杂度应该就是 \(O(\log n), O(\sqrt{n}), O(\sqrt{n} ...
- 防火墙——firewalld
介绍 firewald是对于iptables的一个封装,可以让你更容易地管理iptables规则.firewalld是iptables前端控制器,用于实现持久地网络流量规则. 一.对比 firewal ...
- winSCP上传文件到服务器失败,提示permission denied,返回码3
1.查看sftp服务在你服务器的路径 cat /etc/ssh/sshd_config | grep sftp 2.在winSCP进行连接设置 设置好你的主机名.端口.用户名和密码,然后点击高级,点击 ...
- Android中四大组件
Activity BroadCast Receiver 广播接收者 Service 服务 Content Provider 内容提供者 四大组件都需要在清单文件里面配置一下
- 虚拟机与Docker
https://www.cnblogs.com/kex1n/p/6933039.html https://blog.csdn.net/jingzhunbiancheng/article/details ...
- 帆软报表(finereport) 饼图联动
饼图联动:点击饼图1,饼图2和饼图3显示饼图1的关联数据,接着点击饼图2,饼图3显示饼图2的关联数据,点击上方清除级联,饼图则恢复默认展示状态 下面以上图示例效果为例,说明制作过程. 1.为每个饼图准 ...
- SpringBoot学习第一天
1 引用starter包可以很方面的引入一组你需要的依赖,而不需要逐个去添加依赖到项目中,也就是一站式获取,比如你想写一个有关spring 和jpa相关的项目,仅仅只需要添加一个spring-boot ...
- 06.python语法入门--与用户交互、运算符
与用户交互 输入 input # python2与python3的区别 '''python3''' # 将获取到的用户输入赋值给变量名res res = input(' ...
- Solution -「ABC 219H」Candles
\(\mathcal{Description}\) Link. 有 \(n\) 支蜡烛,第 \(i\) 支的坐标为 \(x_i\),初始长度为 \(a_i\),每单位时间燃烧变短 \(1\) ...