perl
语言中的AWK之基础篇
一
:AWK与perl
- 1. Perl,我们并不陌生了到目前为止,它在web编程中的强大作用,对于每个web开发者而言,重要性不言而喻,
- 由于perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。
- 其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
- 简而言之,Perl 象C一样强大,象awk、sed等脚本描述语言一样方便,由此看来在perl语言中,AWK占据着重要的一席之地。
- 这里我们不去重点的说perl语句而是介绍一下其重要的组成部分AWK的基础内容,
- 下面我们就来揭开perl中的awk的神秘面纱吧!
二:AWK简介
- what is awk? 对于初学者来说这是个模式的代名词,其实awk是三位创造者Aho、Weinberger和Kernighan统称,
- 简单的来说AWK 是一种用于处理文本的编程语言工具
- wk可以做些什么?由于其可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。
- 它具备了一个完整的语言所应具有的几乎所有精美特性,所以其三位创建者已将它正式定义为“样式扫描和处理语言”。
- 它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
三:
AWK处理文本的流程:
- awk在处理文件时,首先扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。
- 如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行
四:
AWK的使用
- AWK的 语法格式:
- Awk [options] ‘scritpts’ filename
- 或者awk [options] ‘partern [actions] ’ filename
- [options]:
- -F: 指定awk 处理文本的行时的分隔符
- 常用的awk内置的三个变量 OFS FS NF
- -FS 指定字段分隔符
- 例如
- Awk -v FS=: ‘{print $2}’ /etc/passwd
- -v OFS= 定义awk 输出时的字符分隔符
- 例如: Awk –v OFS=# ‘{print $1,$2}’ /etc/passwd
- 注:上例中的在输入$1和$2,$1,$2的形式是分别输出$1和$2. $1 $2的形式是将$1和$2合并后输出
- 如
- NF 表示awk处理一行时的字段总数
- 例如:输出一行的最后一个字段
- Awk ‘{print $NF}’ /etc/passwd
- 注:显示一行的倒数第三个字段
- printf 的使用
- 格式:printf format item1,item2,……
- 注意:
- 1:与print命令的最大不同是,printf 需要指定format
- 2:format用于指定后面的每个item的输出格式
- 3:printf语句不会自动打印换行符 \n
- 4:format格式的指示符都以%开头,后跟一个字符
- format:
- %c :显示字符的ASCII码
- %d,%i :显示字符的十进制整数
- %e,$E 科学计数法显示数值
- %f :显示浮点数
- %g ,%G :以科学计数法的格式或者浮点数的格式显示数值
- %s 显示字符串
- %u 显示无符号整数
- %% 显示%自身
- 另外format 还可以添加修饰符
- N:显示宽度
- -:左对齐
- +:显示数值符号
- 例如:
- Awk 中使用 输出重定向
- print items > output-file
- print items >> output-file
- print items | command
awk的操作符:
- 算术操作符:
- -x: 负值
- +x: 转换为数值;
- x^y:
- x**y: 次方
- x*y: 乘法
- x/y:除法
- x+y:
- x-y:
- x%y:
- 字符串操作符:
- 只有一个,而且不用写出来,用于实现字符串连接;
- 赋值操作符:
- =
- +=
- -=
- *=
- /=
- %=
- ^=
- **=
- ++
- --
- 需要注意的是,如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代;
- 布尔值
- awk中,任何非0值或非空字符串都为真,反之就为假
- 比较操作符:
- x < y True if x is less than y.
- x <= y True if x is less than or equal to y.
- x > y True if x is greater than y.
- x >= y True if x is greater than or equal to y.
- x == y True if x is equal to y.
- x != y True if x is not equal to y.
- x ~ y True if the string x matches the regexp denoted by y.
- x !~ y True if the string x does not match the regexp denoted by y.
- subscript in array True if the array array has an element with the subscript subscript
- 表达式间的逻辑关系符:
- &&
- ||
- 条件表达式:
- selector?if-true-exp:if-false-exp
- selector :条件表达式
- if-true-exp:statement
- if-false-exp: statement
- 下面我们来重点说说awk的模式使用
- awk的模式:
- awk [options] ‘parten’ ‘print ….’ filename
- parten:
- 1:正则表达式 格式为/regular expression/
- 2: 表达式 其值非0或者非空字符时满足的条件 例如:$1 ~ /user/ 或者 $1 == ‘user’
- 用运算符~(匹配)和 ~ !(不匹配)
- 例如:
- 指匹配范围格式为pat1,pat2 (pat代表模式)同sed用法
- BEGIN/END 特殊格式
- BEGIN :在awk执行动作之前的处理动作
- 让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量
- END:在awk 执行动作完成后执行的动作
- 让用户在最后一条输入记录被读取之后发生的动作
- 例如:
- Awk –F:’$NF ~/bash/ {print “username bash” ;printf “%-10s %s\n,$1,$NF”}’ /etc /passwd
空模式是指 :匹配所有行
由于篇幅限制字数限制不能全部介绍,如有错误,还望多多指正,多多讨论,谢谢。下篇
将继续awk的循环控制语句的使用,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。