Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > awk笔记
【标  题】:awk笔记
【关键字】:awk
【来  源】:http://www.cublog.cn/u/8780/showart.php?id=179413

awk笔记

Your Ad Here
如果要格式化报文或从一个大的文本文件中抽取数据,awk可以完成这些任务。它在文本浏览和数据的熟练使用上性能优异。

    使用awk执行行操作及怎样从文本文件和字符串中抽取信息,其内容如下:
• 抽取域。
• 匹配正则表达式。
• 比较域。
• 向awk传递参数。
• 基本的awk行操作和脚本。

    awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息。awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

1、 调用awk
有三种方式调用awk:

第一种是命令行方式
awk  [-F fild-separator]  'commands'  input-file(s);
commands是真正的awk命令, [-F域分隔符]是可选的,因为awk使用空格作为缺省的域分隔符,因此如果要浏览域间有空格的文本,不必指定这个选项,但如果要浏览诸如passwd文件,此文件各域以冒号作为分隔符,则必须指明-F选项。

第二种方法是将所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。

第三种方式是将所有的awk命令插入一个单独文件,然后调用
awk -f awk-script-file input-files;
-f选项指明在文件awk_script_file中的awk脚本, input_file(s)是使用awk进行浏览的文件名。

2、  awk脚本
在命令中调用awk,awk脚本由各种操作和模式组成。
如果设置了-F选项,则awk每次读一条记录或一行,并使用指定的分隔符分隔指定域,但如果未设置-F选项,awk假定空格为域分隔符,并保持这个设置直到发现一新行。当新行出现时,awk命令获悉已读完整条记录,然后在下一个记录启动读命令,这个读进程将持续到文件尾或文件不再存在。
1 、 模式和动作
任何awk语句都由模式和动作组成。在一个awk脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。
模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段BEGIN和END。使用BEGIN语句设置计数和打印头。BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行。END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志。如果不特别指明模式, awk总是匹配或打印行数。
实际动作在大括号{ }内指明。动作大多数用来打印,但是还有些更长的代码诸如if和循环(looping)语句及循环退出结构。如果不指明采取动作,awk将打印出所有浏览出来的记录。
2、 域和记录
awk执行时,其浏览域标记为$1,$2 . . . $n。这种方法称为域标识。使用这些域标识将更容易对域进行进一步处理。
使用$1,$3表示参照第1和第3域,注意这里用逗号做域分隔。如果希望打印一个有5个域的记录的所有域,不必指明$1,$2,$3,$4,$5,可使用$0,意即所有域。Awk浏览时,到达一新行,即假定到达包含域的记录末尾,然后执行新记录下一行的读动作,并重新设置域分隔。
注意执行时不要混淆符号$和shell提示符$,它们是不同的。
为打印一个域或所有域,使用print命令。这是一个awk动作(动作语法用圆括号括起来)。
2.1 抽取域
2.2 保存awk输出

有两种方式保存shell提示符下awk脚本的输出。最简单的方式是使用输出重定向符号>
$ awk '{print $0}' grade.txt >wow
使用这种方法要注意,显示屏上不会显示输出结果。因为它直接输出到文件。只有在保证输出结果正确时才会使用这种方法。它也会重写硬盘上同名数据。
第二种方法是使用tee命令,在输出到文件的同时输出到屏幕。在测试输出结果正确与否时多使用这种方法。
awk '{print $0}' grade.txt | tee delete_me_and_die
2.3、 使用标准输入
实际上任何脚本都是从标准输入中接受输入的。 也可使用下述方法:使用重定向方法或管道方法。
2.4、 打印所有记录
$ awk '{print $0}' grade.txt
awk读每一条记录。因为没有模式部分,只有动作部分{print $0}(打印所有记录),这个动作必须用花括号括起来。上述命令打印整个文件。
2.5、 打印单独记录
假定只打印学生名字和腰带级别,通过查看域所在列,可知为field-1和field-4,因此可以使用$1和$4,但不要忘了加逗号以分隔域。
awk '{print $1,$4}' grade.txt
2.6、 打印报告头
打印信息头放置在BEGIN模式部分,因为打印信息头被界定为一个动作,必须用大括号括起来。在awk查看第一条记录前,信息头被打印。
awk 'BEGIN {print “Name  Belt\n-----------------------------------”}
{print $1“\t”,$4}' grade.txt
2.7、 打印信息尾
如果在末行加入end of report信息,可使用END语句。END语句在所有文本处理动作执行完之后才被执行。END语句在脚本中的位置放置在主要动作之后。
awk 'BEGIN {print “Name\n--------”}{print $1} END {“end-of-report”}' grade.txt
2.8、 awk错误信息提示
2.9、 awk 键盘输入

如果在命令行并没有输入文件grade.txt,将会怎样?
awk 'BEGIN {print “Name\n--------”}{print $1} END{“end-of-report”}'
Name
--------
BEGIN部分打印了文件头,但awk最终停止操作并等待,并没有返回shell提示符。这是因为awk期望获得键盘输入。因为没有给出输入文件,awk假定下面将会给出。如果愿意,顺序输入相关文本,并在输入完成后敲<Ctrl-D>键。如果敲入了正确的域分隔符, awk会像第一个例子一样正常处理文本。这种处理并不常用,因为它大多应用于大量的打印稿。
3、 awk中正则表达式及其操作
4、 元字符

是a w k中正则表达式匹配操作中经常用到的字符:
\ ^ $ . [] | () * + ?
[王垠]完全使用linux工作:【上一篇】
sed - 非交互式文本编辑器:【下一篇】
【相关文章】
  • gawk使用简介
  • UNIX下用awk对话单统计日消费额
  • awk中调用系统变量
  • awk 编程实例分析(学习笔记之一)
  • Shell awk 请教
  • 收集awk的一些技巧方案
  • c语言调用gawk[原创]
  • [转]AWK:Linux管理员的智能工具包
  • All about awk
  • shell: awk最新教程
  • 【随机文章】
  • 同轴电缆--概述
  • AIX入门及提高 PDF格式
  • 在weblogic81中,部署应用程序的简易方法
  • asp性能测试报告(转)(二)
  • 原始模型(Prototype)模式学习笔记
  • ARP协议解码详解
  • 在运行时使用鼠标移动控件和改变控件的大小
  • DNS安装配置全过程(BIND)
  • PowerBuilder编程俱乐部二
  • Foxmail文件格式
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.