没有合适的资源?快使用搜索试试~ 我知道了~
awk入门级教材awk入门awk入门
需积分: 10 1 下载量 113 浏览量
2011-05-18
12:15:10
上传
评论
收藏 242KB PDF 举报
温馨提示
试读
11页
awk 是一门编程语言,它的基本操作是在一组文件上查找模式,并在包含这些模式实例的那 些行或字段上进行指定的动作。awk 使得特定数据的选择和变换操作更易于表达
资源详情
资源评论
资源推荐
摘要
awk 是一门编程语言,它的基本操作是在一组文件上查找模式,并在包含这些模式实例的那
些行或字段上进行指定的动作。awk 使得特定数据的选择和变换操作更易于表达;例如,
awk 程序
length > 72
打印长度超过 72 个字符的所有输入行;程序
NF % 2 == 0
打印有偶数个字段的所有行;而程序
{ $1 = log($1); print }
把每行的第一个字段替代为它的对数。
awk 模式可以包括正则表达式和在字符串、数值、字段、变量、数组元素上的关系算符的任
意的布尔组合。动作可以包括同在模式中一样的模式匹配构造,还有算术和字符串表达式与
赋值,if-else、while、for 语句,和多个输出流。
本报告包含用户指南,awk 设计与实现的讨论,和一些计时统计。
September 1, 1978
• 1. 介绍
• 1.1. 用法
• 1.2. 程序结构
• 1.3. 记录和字段
• 1.4. 打印
• 2. 模式
• 2.1. BEGIN 和 END
• 2.2. 正则表达式
• 2.3. 关系表达式
• 2.4. 模式的组合
• 2.5. 模式范围
• 3. 动作
• 3.1. 内置函数
• 3.2. 变量、表达式和赋值
• 3.3. 字段变量
• 3.4. 字符串连接
• 3.5. 数组
• 3.6. 控制流语句
• 4. 设计
• 5. 实现
• 引用
1. 介绍
awk 是设计用来使很多常见的信息检索和文本操作任务易于陈述和进行的一门编程语言。
awk 的基本操作是依次扫描一组输入文件,查找匹配与用户已经指定的模式集合中的任何一
个模式相匹配的行。对于每个模式,都可以指定一个动作;这个动作将在匹配这个模式每一
行上进行。
尽管读者熟悉的 UNIX
®
程序 grep 也认可这种方式,在 awk 中的模式可能比 grep 中的模
式更加一般性,而且允许的动作比只是打印匹配的行更加复杂。例如,awk 程序
{print $3, $2}
依次打印一个表格的第三和第二列。程序
$2 ~ /A|B|C/
打印在第二列是 A、B 或 C 的所有输入行。程序
$1 != prev { print; prev = $1 }
打印第一个字段不同于前面的第一个字段的所有的行。
1.1. 用法
命令
awk program [files]
在指名的一组文件上,或标准输入上、如果没有指定文件的话,执行字符串 program 中的
awk 命令。语句也可以放置到一个文件 pfile 中,并用如下命令执行。
awk -f pfile [files]
1.2. 程序结构
awk 程序是如下形式的语句序列:
模式 { 动作 }
模式 { 动作 }
...
输入的每行都要依次针对每个模式做匹配。对于每个匹配的模式,执行相关的动作。在所有
模式都已经测试过了的时候,取回下一行并从头开始做匹配。
模式或动作二者都可以但不能同时省略。如果一个模式没有动作,简单的把匹配的行复制到
输出。(所以匹配多个模式的行可能被打印多次)。如果一个动作没有模式,则这个动作在所
有输入上进行。不匹配模式的行被忽略。
因为模式和动作都是可选的,动作必须被包围在花括号中来区别于模式。
1.3. 记录和字段
awk 输入被分解成了终止于记录分隔符的“记录”。缺省的记录分隔符是换行,所以缺省的
awk 一次处理它的输入中的一行。当前记录的数可在命名为 NR 的变量中得到。
每个输入记录被当作分解成了“字段”。字段通常用空白也就是空格或 tab 来分隔,但是输
入字段分隔符是可以变更的,这在后面会有所描述。字段被引用为 $1、$2 ,以此类推。这
里的 $1 是第一个字段,而 $0 是整个输入记录自身。字段可以被赋值。在当前记录中字段
的数目可以在命名为 NF 的变量中得到。
变量 FS 和 RS 分别指定输入字段和记录分隔符;它们可以在任何时候被改变为任何的单一
字符。也可以使用可选的命令行参数 −Fc 来设置 FS 为字符 c。
如果记录分隔符为空,把空输入行作为记录分隔符,并把空格、tab 和换行作为字段分隔符
处理。
变量 FILENAME 包含当前输入文件的名字。
1.4. 打印
一个动作可以没有模式,在这种情况下动作在所有行上执行。最简单的动作是打印某些或所
有的记录;这可以通过 awk 命令 print 来完成。awk 程序
{ print }
打印每个记录,也就是把输入完好的复制到输出。更有用的是打印来自每个记录的一个字段
或某些字段。例如
print $2, $1
按逆序打印前两个字段。在 print 语句中用逗号分隔的项,在输出的时候会用当前输出字段
分隔符分隔开。没有用逗号分隔的项会串联起来,所以
print $1 $2
把第一个和第二个字段合在一起。
可以使用预定义的变量 NF 和 NR;例如
{ print NR, NF, $0 }
打印出前导了记录数和字段数的每个记录。
剩余10页未读,继续阅读
zyq472735711
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0