- 1. Perl,咱们并不陌生了到目前为止,它在web编程中的强大做用,对于每一个web开发者而言,重要性不言而喻,
- 因为perl借取了C、sed、awk、shell scripting以及不少其余程序语言的特性。
- 其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
- 简而言之,Perl 象C同样强大,象awk、sed等脚本描述语言同样方便,由此看来在perl语言中,AWK占据着重要的一席之地。
- 这里咱们不去重点的说perl语句而是介绍一下其重要的组成部分AWK的基础内容,
- 下面咱们就来揭开perl中的awk的神秘面纱吧!
- what is awk? 对于初学者来讲这是个模式的代名词,其实awk是三位创造者Aho、Weinberger和Kernighan统称,
- 简单的来讲AWK 是一种用于处理文本的编程语言工具
- wk能够作些什么?因为其能够进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。
- 它具有了一个完整的语言所应具备的几乎全部精美特性,因此其三位建立者已将它正式定义为“样式扫描和处理语言”。
- 它容许您建立简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其余的功能。
- 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
- 算术操做符:
- -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 [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