AWK 学习(转)

本文详细介绍了awk编程语言的基础知识,包括命令格式、选项、模式和操作、环境变量、运算符、记录和域的概念,以及gawk的专用特性。通过实例解析了awk在文本处理中的应用,如正则表达式、条件语句、循环、数组和内建函数的使用。文章适合初学者学习awk,并提供了多个示例帮助理解。
摘要由CSDN通过智能技术生成

awk初学,找到这个笔记,觉得很不错,保留以后参考

Awk学习笔记

整理:Jims of 肥肥世家

<jims.yang@gmail.com>


Table of Contents

1. awk简介

2. awk命令格式和选项

2.1. awk的语法有两种形式

2.2. 命令选项

3. 模式和操作

3.1. 模式

3.2. 操作

4. awk的环境变量

5. awk运算符

6. 记录和域

6.1. 记录

6.2.

6.3. 域分隔符

7. gawk专用正则表达式元字符

8. POSIX字符集

9. 匹配操作符(~)

10. 比较表达式

11. 范围模板

12. 一个验证passwd文件有效性的例子

13. 几个实例

14. awk编程

14.1. 变量

14.2. BEGIN模块

14.3. END模块

14.4. 重定向和管道

14.5. 条件语句

14.6. 循环

14.7. 数组

14.8. awk的内建函数

15. How-to

1. awk简介

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred AhoBrian KernighanPeter WeinbergergawkawkGNU版本,它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUNgawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。

2. awk命令格式和选项

2.1. awk的语法有两种形式

·         awk [options] 'script' var=value file(s)

·         awk [options] -f scriptfile var=value file(s)

2.2. 命令选项

-F fs or --field-separator fs

指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:

-v var=value or --asign var=value

赋值一个用户定义变量。

-f scripfile or --file scriptfile

从脚本文件中读取awk命令。

-mf nnn and -mr nnn

nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

-W compact or --compat, -W traditional or --traditional

在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。

-W copyleft or --copyleft, -W copyright or --copyright

打印简短的版权信息。

-W help or --help, -W usage or --usage

打印全部awk选项和每个选项的简短说明。

-W lint or --lint

打印不能向传统unix平台移植的结构的警告。

-W lint-old or --lint-old

打印关于不能向传统unix平台移植的结构的警告。

-W posix

打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符****=不能代替^^=fflush无效。

-W re-interval or --re-inerval

允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]

-W source program-text or --source program-text

使用program-text作为源代码,可与-f命令混用。

-W version or --version

打印bug报告信息的版本。

3. 模式和操作

awk脚本是由模式和操作组成的:

pattern {action} $ awk '/root/' test,或$ awk '$3 < 100' test

两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。默认情况下,每一个输入行都是一条记录,但用户可通过RS变量指定不同的分隔符进行分隔。

3.1. 模式

模式可以是以下任意一个:

·         /正则表达式/:使用通配符的扩展集。

·         关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。

·         模式匹配表达式:用运算符~(匹配)~!(不匹配)

·         模式,模式:指定一个行的范围。该语法不能包括BEGINEND模式。

·         BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。

·         END:让用户在最后一条输入记录被读取之后发生的动作。

3.2. 操作

操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四部份:

·

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值