原始版本于1994年撰写并发表在SUN OBSERVER杂志上。
更新日期:2004年3月9日 美国东部时间11点07分08秒 星期二
更新日期:2007年2月16日 美国东部时间5点32分38秒 星期五  更新日期:2008年4月16日美国东部时间20点55分07秒 星期三
对于在文件上的操作来说,AWK是一个非常灵活的编程语言。在这个网页上,我们会尽可能给您提供易于掌握的例子:
下面的几个例子是关于部分文件名执行脚本的扩展。一旦您下载,并使其可执行,您可以对您想要的任意资讯进行重命名。
为什么学AWK?
之前我涉及过有关GREP和SED的讨论。本节要讨论的AWK,是另一个UNIX shell编程的基石。共有三类不同的AWK,分别是:
AWK¬—AT&T的原版。
NAWK—AT&T的新的升级版。
GAWK—自由软件基金会(一个组织)的版本。
开始,我并不想讨论NAWK,但是一些UNIX的供应商总是用NAWK代替AWK,并且还有一些不兼容性在这两者之间。若不把这些不同点告诉大家,对我来说将是极痛苦的事情。所以当我讲到这些问题是我将突出它们。所有AWK的特征都在NAWK和GAWK里面,了解这点很重要。若不能说是全部的话,则大部分NAWK的特征都在GAWK里。NAKI SHIPS
是Solaris造作系统的一部分,GAWK则不是。然而,在互联网上,许多网站都提供免费的消息来源。如果你用LINUX操作系统,你就已经在用GAWK了。但总的来说,除非另有说明,我讲的都将假定是经典的AWK。
为什么AWK如此重要呢?
它是一个出色的过滤器和汇报者,很多UNIX实用程序会生成行和列的信息。处理这些行和列,AWK是一个完美的工具,并且用AWK会比大多数传统的编程语言容易得多。您可以认为它是伪C的直译,因为它被认为和C的操作符一样。AWK也有字符操作函数,所以AWK可以搜索特定的字符串并且修改其输出。AWK还有相当重要的关联数组,这是很多其它计算机语言都缺乏的特征。关联数组可以让一个非常复杂的问题很轻易地解决。
我将不会详述AWK,我将会涉及更为重要的部分,避免许多AWK的变型出现。讨论三个不同版的AWK可能会使问题变得混乱。我不会讲述AWK的GNU版本,即所谓的“GAWK”。同样,我也将不会讨论新的AT&T AWK,即所谓的“NAWK”。新的AWK在SUN(一个公司)的操作系统上出现,并且你会发现它在很多方面优于老的AWK。尤其是它有更好的诊断方法,并且不会像原来的AWK一样诊断时出现类似于“在附近... ...行有问题可解决”等让人讨厌的信息。相反,“NAWK”会给它所不理解的画底线,并用箭头对准错的部分。GAWK也是这样做,并且这样做很有帮助。如果你发现你所需要的那个特诊在AWK里面很难或者不可能实现,我建议你要么用NAWK,要么用GAWK,或者将您的AWK脚本转换成PERL,从而用PERL配备的“a2p”转换程序实现。PERL是一种非凡的编程语言,并且我一直在用,但我不准备在本文中说明PERL,我已经阐述了我的目的,我可以问心无愧地继续本文。
许多UNIX实用程序都有很奇怪的名字,AWK便是其中之一。AWK不过是一个缩写上的尴尬而已,实际上,他是一个优雅而简单的名字,“AWK”源自于三大语言开发者:A.Aho、B.W.Kernighan和P.Weinberger。

基本结构
一个AWK编程语言的基本的机制有如下形式:
模式 { 功能 }  (pattern { action })
当执行功能时,其模式是指定的。像大多数的UNIX实用程序一样,AWK是线导向的。也就是说,模式指定一个正在执行的测试,这个测试的每行都作为输入。如果环境允许,那么功能就可以执行。默认的模式是可以跟每行都匹配。这就是空白或者无效的模式。另外两个重要的模式用“开始(BEGIN)”和“结束(END)”来指定。如您所想,这两个词在上一行度过之后和任意行被指定以前可执行其功能。AWK程序如下:
开始    {打印“start”}      BEGIN  { print "START" }
  {打印}                            { print }
结束     {打印“stop”}      END    { print "STOP" }
在输入文件的前后各加一行,这不是非常有用,但是一个简单的变化,我们就能让它变成一个典型的AWK程序。
BEGIN { print "File/tOwner"," }
{ print $8, "/t", $3}
END { print " - DONE -" }
我将会在下一个部分改进脚本,但我们可以称之为“FILEOWNER”。但我们尚不能将其放入一个脚本或文件中。我一会就可以讲到那里,坚持一下跟着我走你会深深体会到AWK的深意。
字符“/t”表示制表符(专业用语),以便于在每个界限上都有输出线。"$8" 和 "$3"有类似于shell脚本的含义,关于3和8,指的是第三和第八输入线的区域。你可以认为一个区作为一个栏,并且您所指定的功能可以在读入的任意行或列运行。
在AWK和一个有双引号的shell进程之间有两点不同,AWK理解指定字符按照“/”,比如字符t。Bourne和C UNIX shells却并不这样。此外,与shell(和PERL)不同,,AWK不在字符串中评估不变量。比如,第二行不能这样写:
{print "$8/t$3" }
那个例子不能打印出“$8 $3”,在引号里的$符号不是一个典型的特征值。另外,它对应一个区域。那第三和第八区时说明意思呢?考虑到Solaris系统里的"/usr/bin/ls -l" 命令,每个命令有八个信息栏。System V的版本(类似于Linux版) , “ / usr/5bin/ls - 1 , ”有9个栏目。第三栏是拥有者,并且第八(或第九)栏在这个文件名里。这个AWK编程语言可用于加快"ls -l"命令的生成,然后是拥有者为每个文件打印出文件名。我将为你演示.
更新:在Linux中,将"$8" 变成 "$9"。
另一个关于$符号的使用。在一些脚本语言比如PERL和各种SHELL语言中,单个$符意味着接下来的是一个变量。AWK则不同,$符意味着我们所指向的一个区或栏在当前列。当你在使用PERL和AWK两种不同的语言时,记住它们的$符的含义不同。因此,接下来的代码段打印出两个区域作为标准输出,打印出的第一区是数字5,第二个是在输入行的第五区(或栏)。
BEGIN { x=5 }
{ print x, $x}

执行一项AWK脚本
现在我们开始写第一个AWK 脚本,有两种方法。

AWK手册(ZYF译)相关推荐

  1. unix awk手册读书笔记

    http://note.youdao.com/noteshare?id=9ac76eb63a53ac000f7814454642d2b0 转载于:https://www.cnblogs.com/tai ...

  2. [转]linux awk命令详解

    原文链接 : http://blog.chinaunix.net/uid-23302288-id-3785105.html awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或 ...

  3. awk 不一样的分隔符 - 空格分隔符

    今天用 awk 格式化字符串的时候,发现了一个奇怪现象,查看了 awk 手册后,特以此文记录. 示例文本内容 后文所有 awk 语名中出现的 file.txt 内容均如下: # cat -A file ...

  4. shell之awk命令详解

    awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F ...

  5. awk以空格为分隔符的问题

    awk以空格为分隔符 root@ubuntu:/home# echo "1 2 3 4" | awk -F' ' '{print $1}' 1 root@ubuntu:/home# ...

  6. awk,gawk,mawk,nawk的重定向笔记221107

    awk 自身可以用 awk '{print > "路径文件名"}' 的方式实现重定向, ( "路径文件名"要加引号 , 本文件夹可不加引号) 也可以用sh ...

  7. awk,gawk调用shell,bash中的变量 笔记221106

    awk,gawk调用shell,bash中的变量 笔记221106 "'${变量名}'" 双 包 单 包 ${} 包 变量名 "'"${变量名}"'& ...

  8. linux查询awk命令用法

    原文链接 : http://blog.chinaunix.net/uid-23302288-id-3785105.html awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或 ...

  9. Thrift在Windows及Linux平台下的安装和使用示例

    thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的RPC(远程服务调用)框架. 本文主要目的是分别介绍在Windows及Linux平台下的Thri ...

  10. 信息安全系统设计基础学习总结第二周

    实验一: 作业 zy e http://www.cnblogs.com/zhengwei0712/p/4823168.html 实验二和实验三: http://www.cnblogs.com/zhen ...

最新文章

  1. native react 常用指令_React-Native 常用命令
  2. 2020年前端招聘技术概览
  3. 产品经理的职责(转)
  4. 新年春节海报素材精品,再也不怕老板催稿!
  5. 【经验】在CSS中定义超链接样式a:link、a:visited、a:hover、a:active的顺序
  6. Wheel ProgressBar 实现之三——模拟进度过程
  7. 《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》笔记
  8. 20210327“泰迪杯数据挖掘大赛”csv模块使用记录
  9. C# int和byte[]之间的互转
  10. DW个人网站设计 练习作业
  11. 【Postman】使用Tests进行环境变量设置
  12. UI设计必备网站,一定要收藏。
  13. 【数据分析实例】 2021年十万条厦门招聘数据分析
  14. [FLASH]加载外部图片到舞台
  15. PyMySQL安装问题解决办法-UnicodeDecodeError:gbk codec cannot decode byte 0xaf
  16. 安装 Electron 的门道
  17. 【踩坑记录】uni-app工程转vue-cli 工程
  18. Day1 命名规范 静态函数 构造析构 指针引用
  19. adrv9025 serdes jesd 调试资料 整理
  20. 我的python语音阅读器

热门文章

  1. php股票量化交易接口有什么优势?
  2. 物联网应用技术有哪些?
  3. 外文论文阅读生词积累
  4. mysql order by注入_sql注入之order by注入
  5. Mac安装rocketmq
  6. ThreadLocal 源码之 expungeStaleEntry
  7. Centos7.8系统安装dkms
  8. hdu 6080 度度熊保护村庄(floydS使用技巧)
  9. HTML页面基本结构
  10. 读《富爸爸,穷爸爸》后感(二)