perl语言中的AWK之基础篇

perl 语言中的AWK之基础篇
:AWK与perl
 
 
  1. 1. Perl,我们并不陌生了到目前为止,它在web编程中的强大作用,对于每个web开发者而言,重要性不言而喻,
  2. 由于perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。
  3. 其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
  4. 简而言之,Perl 象C一样强大,象awk、sed等脚本描述语言一样方便,由此看来在perl语言中,AWK占据着重要的一席之地。
  5. 这里我们不去重点的说perl语句而是介绍一下其重要的组成部分AWK的基础内容,
  6. 下面我们就来揭开perl中的awk的神秘面纱吧! 
二:AWK简介
 
 
  1. what is awk? 对于初学者来说这是个模式的代名词,其实awk是三位创造者Aho、Weinberger和Kernighan统称,
  2. 简单的来说AWK 是一种用于处理文本的编程语言工具  
  3. wk可以做些什么?由于其可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。
  4. 它具备了一个完整的语言所应具有的几乎所有精美特性,所以其三位创建者已将它正式定义为“样式扫描和处理语言”。
  5. 它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。  
三: AWK处理文本的流程:
 
 
  1. awk在处理文件时,首先扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。
  2. 如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行 
四: AWK的使用
 
 
  1. AWK的 语法格式:  
  2. Awk [options] ‘scritpts’  filename  
  3.  或者awk [options] ‘partern [actions] ’ filename  
  4. [options]:  
  5. -F: 指定awk 处理文本的行时的分隔符
 例如 

 
 
  1. 常用的awk内置的三个变量 OFS  FS  NF   
  2. -FS 指定字段分隔符
  3. 例如  
 
 
  1. Awk  -v FS=: ‘{print $2}’ /etc/passwd  

 
 
  1. -v OFS= 定义awk 输出时的字符分隔符 
  2. 例如: Awk –v OFS=# ‘{print $1,$2}’ /etc/passwd

 
 
  1. 注:上例中的在输入$1和$2,$1,$2的形式是分别输出$1和$2. $1 $2的形式是将$1和$2合并后输出  
  2. 如  

 
 
  1.  NF 表示awk处理一行时的字段总数  
  2.  例如:输出一行的最后一个字段  
  3. Awk ‘{print $NF}’ /etc/passwd 

 
 
  1. 注:显示一行的倒数第三个字段   

 
 
  1. printf 的使用  
  2. 格式:printf format item1,item2,……  
  3.  注意:  
  4. 1:与print命令的最大不同是,printf 需要指定format  
  5. 2:format用于指定后面的每个item的输出格式  
  6. 3:printf语句不会自动打印换行符 \n  
  7. 4:format格式的指示符都以%开头,后跟一个字符  
  8. format:  
  9. %c :显示字符的ASCII码  
  10. %d,%i :显示字符的十进制整数  
  11. %e,$E 科学计数法显示数值  
  12. %f :显示浮点数  
  13. %g ,%G :以科学计数法的格式或者浮点数的格式显示数值  
  14. %s  显示字符串  
  15. %u  显示无符号整数  
  16. %% 显示%自身  
  17. 另外format 还可以添加修饰符  
  18. N:显示宽度  
  19. -:左对齐  
  20. +:显示数值符号  
  21. 例如: 

 
 
  1. Awk 中使用 输出重定向  
  2. print items > output-file  
  3. print items >> output-file  
  4. print items | command   
awk的操作符: 
 
 
  1. 算术操作符:  
  2. -x: 负值  
  3. +x: 转换为数值;  
  4. x^y:   
  5. x**y: 次方  
  6. x*y: 乘法  
  7. x/y:除法  
  8. x+y:  
  9. x-y:  
  10. x%y:  
  11. 字符串操作符:  
  12. 只有一个,而且不用写出来,用于实现字符串连接;  
  13. 赋值操作符:  
  14. =  
  15. +=  
  16. -=  
  17. *=  
  18. /=  
  19. %=  
  20. ^=  
  21. **=  
  22. ++  
  23. --  
  24. 需要注意的是,如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代;  
  25. 布尔值 
  26. awk中,任何非0值或非空字符串都为真,反之就为假  
 
 
  1.  比较操作符:  
  2. < y       True if x is less than y.   
  3. <= y  True if x is less than or equal to y.   
  4. > y       True if x is greater than y.   
  5. >= y  True if x is greater than or equal to y.   
  6. x == y  True if x is equal to y.   
  7. x != y  True if x is not equal to y.   
  8. x ~ y      True if the string x matches the regexp denoted by y.   
  9. x !~ y  True if the string x does not match the regexp denoted by y.   
  10. subscript in array    True if the array array has an element with the subscript subscript  
  11.  表达式间的逻辑关系符:  
  12.  &&  
  13. || 
  14. 条件表达式:  
  15. selector?if-true-exp:if-false-exp  
  16.  selector :条件表达式  
  17.  if-true-exp:statement  
  18.  if-false-exp: statement  
  • 下面我们来重点说说awk的模式使用
 
 
  1. awk的模式:  
  2. awk [options] ‘parten’ ‘print ….’ filename  
  3. parten:  
  4. 1:正则表达式 格式为/regular expression/  
  5. 2: 表达式  其值非0或者非空字符时满足的条件  例如:$1 ~ /user/ 或者 $1 == ‘user’  
  6. 用运算符~(匹配)和 ~ !(不匹配)  
  7. 例如: 

 
 
  1. 指匹配范围格式为pat1,pat2 (pat代表模式)同sed用法  
  2.  BEGIN/END 特殊格式   
  3.    BEGIN :在awk执行动作之前的处理动作  
  4.     让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量  
  5.  END:在awk 执行动作完成后执行的动作  
  6.     让用户在最后一条输入记录被读取之后发生的动作  
  7. 例如: 
  8. Awk –F:’$NF ~/bash/ {print “username bash” ;printf “%-10s %s\n,$1,$NF”}’ /etc /passwd

 空模式是指 :匹配所有行
由于篇幅限制字数限制不能全部介绍,如有错误,还望多多指正,多多讨论,谢谢。下篇 将继续awk的循环控制语句的使用,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(&lt;&gt;){ chomp; print &quot;$_n&quot; unless
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起。表格内容如下: 员工号码员工姓名职位入职日期1001张三销售1980/12/17 0:00:
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确。写了个Perl脚本,可快速构造MySQL脚本语句。脚本如下:#!/usr/bin/perluse strict;m
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了一个表的数据量统计日报,主要是针对数据库中使用较频繁,数据量又较大的31张表。该日报有两个sheet组成,第一个sheet是数据填写,第二个sh
在实际生产环境中,常常需要从后台日志中截取报文,报文的形式类似于.........一个后台日志有多个报文,每个报文可由操作流水唯一确定。以前用AWK写过一个,程序如下:beginline=`awk &
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让人领略到perl正则表达式的强大,程序如下:#!/usr/bin/perluse strict;my (%hash,%hash1,@arra
忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关的讨论帖),于是乎,决定在我自己的 blog 上也贴一下 :) 原生 CGI/FastCGI 的 web app 对于较小的应用非常合适,但稍复杂一些就有些痛苦,但运行效率是最高的 ;) 如果是自己用 Perl 开发高性能的站,多推荐之。 Catalyst, CGI::A
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键。 所谓bless就是把 类型信息 赋予 实例变量。 程序包括5个文件: person.pm :实现了person类 dog.pm :实现了dog类 bless.pl : 正确的使用bless bless.wrong.pl : 错误的使用bless bless.cc : 使用C++语言实
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8", decode("gb2312", $str));   Utf转 gb2312的方法: use Encode; my $str = "utf8中文"; $str_cnsoftware = encode("gb2312", decode("utf-8
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;     #!/usr/bin/perl use Time::HiRes qw(gettimeofday); use POSIX; $SLEEPTIME=3; sub getDiskUtl() { $clock_ticks = POSIX::sysconf( &POSIX::_SC_
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello World" 这个程序和前面 BASH 的 Hello World 程序几乎相同,只是第一行换成了 #!/usr/bin/perl ,还有显示的时候用的是 print,而不是 echo。有了前面 BASH 基础和 C 语言的基础,许多 Perl 的知识可以很
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,以及进程管理几部分。 1 基本输入输出 在 BASH 脚本程序中,我们用 read var 来实现从键盘的输入,用 echo $var 来实现输出。那么在 Perl 中将有一点变化。Perl 中将标准输入用关键词 表示;标准输出用 表示,标准错误输出用 表示。故而从标准输入读取数据可以写成: $
正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务,当然在 CGI 程序设计中就更能得心应手了。下面我们列出一些正则表达式书写时的一些基本语法规则。 1 正则表达式的三种形式 首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是: 匹配:m/<regexp>/ (还可以简写为 /
在学习Perl和Shell时,有很多人可能会问这样一个问题,到底先学习哪个或者学习哪个更好! 每个人都有自己的想法,以下是个人愚见,请多多指教! Perl是larry wall为解决日常工作中的一个编程问题而产生的,它最初的主要功能是用于分析基于文本的数据和生成这些数据的统计和结果;尽管初衷很简单,但是后来发展了很多特点: 1、Perl是一种借鉴了awk、C、sed、shell、C++、Java等
Perl 有很多命令行参数. 通过它, 我们有机会写出更简单的程序. 在这篇文章里我们来了解一些常用的参数. (重点提示:在window下执行命令行程序的方式为 : perl -e "some code", 注意:是双引号啊,不是单引号,linux下执行时单引号) Safety Net Options 在使用 Perl 尝试一些聪明( 或 stupid) 的想法时, 错误难免会发生. 有经验的 P
转自: http://bbs.chinaunix.net/thread-1191868-1-1.html# 让你的perl代码看起来更像perl代码,而不是像C或者BASIC代码,最好的办法就是去了解perl的内置变量。perl可以通过这些内置变量可以控制程序运行时的诸多方面。 本文中,我们一起领略一下众多内置变量在文件的输入输出控制上的出色表现。 行计数 我决定写这篇文章的一个原因就是,当我发现
2009-02-02 13:07 #!/usr/bin/perl # D.O.M TEAM - 2007 # anonyph; arp; ka0x; xarnuz # 2005 - 2007 # BackConnectShell + Rootlab t00l # priv8! # 3sk0rbut0@gmail.com # # Backconnect by data cha0s (modifica
转自: http://bbs.chinaunix.net/thread-1191868-1-1.html# 让你的perl代码看起来更像perl代码,而不是像C或者BASIC代码,最好的办法就是去了解perl的内置变量。perl可以通过这些内置变量可以控制程序运行时的诸多方面。 本文中,我们一起领略一下众多内置变量在文件的输入输出控制上的出色表现。 行计数 我决定写这篇文章的一个原因就是,当我发现
黑莓 手机 屏幕发展历程对比 blackberry 各型号屏幕大小   黑莓手 机 一直在不断发展且新机型 也在不断上市. 因此,不同黑莓机型的屏幕分辨率也在不断变化着. 总的来说,屏幕分辨率一直在提高并且越来越清晰.我们对所有的黑莓 机型的屏幕分辨率做了个对比.~51blackberry ~com     可能大家特别感兴趣是新发布的黑莓机型,它的分辨率也是黑莓 机型中前所未有的.   黑莓 b
      公司里没有我用惯的UltraEdit的lisence了, 只能无奈转向开源的Notepad++, 找了半天才知道配置运行Perl的办法。         1,用Notepad++打开.pl文件,         2, F5或者Run->Run,打开运行窗口,在下面的框框里输入:Perl -w "$(FULL_CURRENT_PATH)", 然后Save,保存成一个命令就行,名字比如叫R