学习GAWK入门(整理)

这两天花了点时间学awk,虽然只是基础,不过还是要整理一下。顺便介绍一个比较好得学习网站:

https://www6.software.ibm.com/

AWK是一种文本处理和模式匹配语言,程序语句描述需要进行匹配和处理的输入数据。AWK程序在其输入数据中搜索包含模式的记录、对记录执行指定的操作,直到程序到达输入的末尾。

与perl一样,awk是一种解释性语言,所以awk不需要进行编译。

GAWK 具有下列独特的特性和优点:

  • 在所有主要的 UNIX 平台以及其他操作系统中都可以使用它,包括 Mac OS X 和 Microsoft® Windows®。
  • 它是可移植操作系统接口 (POSIX) 兼容的,并且包含 1992 POSIX 标准中的所有特性。
  • 它没有预定义的内存限制。
  • 可以使用一些新的内置函数和变量。
  • 它包含一些特殊的 regexp 操作符。
  • 记录分隔符中可以包含 regexp 操作符。
  • 可以使用特殊文件支持来访问标准的 UNIX 流。
  • 可以使用 Lint 检查。
  • 在缺省情况下,它使用扩展的正则表达式。
  • 它支持无限制的行长度和连续使用反斜杠字符 (/)。
  • 它具有更好的、更具描述性的错误消息。
  • 它包含一些 TCP/IP 网络函数。

AWK以文本进行操作,而文本又包括文件或标准输入流,它对文本进行分类得到记录和字段。记录由记录分隔符指定,默认的记录分隔符为换行符,存放在RS变量中,可以自行修改;字段由字段分隔符指定,默认为空格,存放在变量FS中,也可以修改。

记录
将 AWK 输入数据划分为记录

每个记录中的每个字段都存放在相应的编号中,如第一个字段为1,第二个字段为2,第N个字段为NF,编号0引用当前整个记录

字段
AWK 记录中的字段 

AWK的规则

/pattern/ {action}

pattern为模式,action为执行的操作,对所有匹配pattern的记录进行action操作,如

$awk  ' //{print} '  myfile

//为任意模式,也就是匹配所有记录,print将记录输出,上面命令为将文件myfile输出到标准输出。{}为空操作,不执行任何操作,多个action用分号";"分隔。

两个特殊的模式

BEGIN{action}、END{action},前者在文本之前执行,常定义一些变量,后者在文本之后执行,常做一些制表,汇总的处理

常用命令

语句描述
exit 停止程序的执行,并且退出。
next 停止处理当前记录,并且前进到下一条记录。
nextfile 停止处理当前文件,并且前进到下一个文件。
print 打印使用引号括起来的文本、记录、字段和变量。(缺省情况下是打印出当前整行记录。)
printf 打印格式化文本,类似于它的 C 语言对等成分,但必须指定结尾的换行。
sprintf 返回格式化文本字符串,与 printf 使用相同的格式。

四种不同的方法使用awk:文件、命令行、筛选器、脚本。

命令行:awk '/pattern/{action}' filename

文件:awk  -f  awkfile  filename       //不用打引号

脚本:#! /usr/bin/awk  -f                    //以此开头

筛选器:用管道将数据传入awk       $cat sampel | awk '//{print}'

字段和记录
将示例文件分解为 AWK 记录和字段

如文件myfile:

Heigh-ho! sing, heigh-ho! unto the green holly:
Most friendship is feigning, most loving mere folly:
Then, heigh-ho, the holly!

$awk  ' {print $1,$2,$5} '  myfile

输出

Heigh - ho !  sing, the
most frendship most
then, heigh
- ho,

注意$1和$2之间的逗号是用来输出空格的。

字段分隔符

一般在BEGIN模式中定义,如 $awk 'BEGIN{FS = "!"} //{print $1}' myfile

还可以用-F选项指定字段分隔符,如 $awk -F ":" '//{print $1}' myfile

常用变量

变量描述
NF 该变量包含每个记录的字段个数。
NR 该变量包含当前的记录个数。
FS 该变量是字段分隔符。
RS 该变量是记录分隔符。
OFS 该变量是输出字段分隔符。
ORS 该变量是输出记录分隔符。
FILENAME 该变量包含所读取的输入文件的名称。
IGNORECASE IGNORECASE 设置为非空值,GAWK 将忽略模式匹配中的大小写。

GAWK 模式匹配

在输入记录中匹配模式

1. 字符串:

$awk  / green / {print}  myfile

匹配有green字段的记录

2. 正则表达式:

$awk  /! . *!/ {print}  myfile

匹配两个感叹号间有任何字符串的文本的记录

3. 非打印字符:/xxx 十进制数,xxx为10进制

                            /xNN十六进制,NN为16进制

在字段中匹配模式

格式

field !~ /xxx/                    #不包含

field  ~  /xxx/                   #包含

$awk  ' $3 ~/is/{print} '  myfile

输出

Most friendship  is  feigning, most loving mere folly:

可以在两个模式之间使用布尔表达式 &&、| | 或 可以在模式之前使用 !  

在两个模式之间使用逗号(,)可以指定一个范围,它输出包括匹配项部分的完整内容,即使在两个不同的记录中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。 最简单地说, AWK 是一种用于处理文本的编程语言工具。AWK 在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法。它的设计思想来源于 SNOBOL4 、sed 、Marc Rochkind设计的有效性语言语言工具 yacc 和 lex ,当然还从 C 语言中获取了一些优秀的思想。在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。 尽管操作可能会很复杂,但命令的语法始终是: awk '{pattern + action}' 或者 awk 'pattern {action}' 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 gawk 是 AWK 的 GNU 版本。 一般的UNIX作业系统,本身即附有AWK,不同的UNIX作业系统所附的AWK其版本亦不尽相同,若读者所使用的系统上未附有AWK,可通过 anonymous ftp 到下列地方取得: phi./pub/gnu ftp/UNIX/gnu preppub/gnu 注 解:一种编程语言,因其模式匹配语法而特别有用,通常用于数据检索和数据转换。一个GNU版本称为Gawk

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值