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 }’ /etc/passwd
-v OFS= 定义awk 输出时的字符分隔符 例如: Awk –v OFS=# ‘{print ,}’ /etc/passwd
注:上例中的在输入和,,的形式是分别输出和. 的形式是将和合并后输出 如
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 | commandawk的 *** 作符:
算术 *** 作符: -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.下面我们来重点说说awk的模式使用
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空模式是指 :匹配所有行 由于篇幅限制字数限制不能全部介绍,如有错误,还望多多指正,多多讨论,谢谢。下篇 将继续awk的循环控制语句的使用, 总结
以上是内存溢出为你收集整理的perl语言中的AWK之基础篇全部内容,希望文章能够帮你解决perl语言中的AWK之基础篇所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)