Awk学习笔记
awk的学习和使用(一)

awk的学习和使用(一)最近接触了linux的使用和一些命令、工具的使用,awk恐怕是linux用处最广的工具之一了,今天开始,我打算记录下我的学习过程。
一.awk的简介与sed和grep很相似,awk是一种样式扫描与处理工具,其功能远远强于sed和grep,除了几乎所有的sed和grep功能之外,awk 还可以进行样式装入,流控制,数学运算符,进程控制语句,甚至内置的变量和函数。
它具备了一个完整的语言所应具备的特性,实际上awk确实拥有自己的语言,awk程序设计语言,awk的三位创建者已将其定义为:awk样式扫描和处理语言。
基于文本的样式扫描和处理是我们经常要做的工作,比如从一个上千行的具有一定格式的文本文件中找出满足要求的行并输出到一个新文本,就可以使用awk。
再比如,监控网络时,由于网络上流动的数据非常多,如果需要获得某些特定的数据,使用awk过滤。
简而言之,awk就是一个强大的文本处理工具。
在这里有一个可遵循的一般原则:如果你用普通的shell工具或shell script有困难的话,试试awk,如果awk仍不能解决问题,则便用C语言,如果C语言仍然失败,则移至C++。
二.awk的调用方式1.awk命令行的方式,适用于解决简单问题,例如:打印testfile 文本中第一列为abc的所有行(省略了print)2.使用-f选项调用awk程序文件,例如:将一段awk程序保存到文本,名为testawk1,在命令行中执行该文件3.利用命令解释器调用awk,例如:将一段awk程序保存至文本,名为myawk,与前面不同的是该文本首行需要添加:#!/bin/awk -f ,保存后赋予该文件执行权限,命令行中直接调用:三.awk语法awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]-F re: 允许awk更改其字段分隔符。
Linux三剑客之awk精讲(基础与进阶)

Linux三剑客之awk精讲(基础与进阶)标签(空格分隔):Linux实战教学笔记-陈思齐快捷跳转目录:* 第1章:awk基础入门* 1.1:awk简介* 1.2:学完awk你可以掌握:* 1.3:awk环境简介* 1.4:awk的格式* 1.5:模式动作* 1.6:awk的执行过程 * 1.6.1:小结awk执行过程* 1.7:记录和字段* 1.7.1:记录(行)* 1.7.2:记录分隔符-RS * 1.7.3:对$0的认识* 1.7.4:企业面试题* 1.7.5:awk记录知识小结* 1.7.6:字段(列)* 1.7.7:ORS与OFS简介* 1.9:awk基础入门总结* 第2章:awk进阶* 2.1:awk模式与动作 * 2.2:正则表达式作为模式* 2.2.1:awk正则匹配操作符* 2.2.2:awk正则表达式匹配整行* 2.2.3:awk正则表达式匹配一行中的某一列* 2.2.4:某个区域中的开头和结尾* 2.2.5:创建测试环境* 2.2.6:测试文件说明* 2.2.7:awk正则表达式练习题* 2.2.8:awk正则表达式练习题-详解* 2.2.9:企业面试题* 2.2.10:明明白白扩展正则表达式:+(加号)* 2.2.11:awk正则之{} -花括号* 2.2.12:企业案例1 * 2.2.13:企业案例2 * 2.3:比较表达式做为模式-需要一些例子* 2.3.1:企业面试题* 2.3.2:如果判断某一列是否等于某个字符呢?* 2.4:范围模式* 2.5:awk特殊模式-BEGIN模式与END模式* 2.5.1:BEGIN模块* 2.5.2:awk中变量的概念简介* 2.5.3:END模块 * 2.6:awk中的动作* 2.7:awk模式与动作小结* 2.8:总结awk执行过程* 2.9:awk数组* 2.10:图片-数组第1章awk基础入门要弄懂awk程序,必须熟悉了解这个工具的规则。
SHELL学习AWK入门 电脑资料

shell学习awk入门电脑资料
一. awk应用场景
格式化数据或从一个大的文本文件中抽取记录
二. 使用方法
命令行方式
$awk [-F field-separator] ‘mands’ input-file(s)
mands是真正的awk命令
[-F域分割符]是可选的,如果无-F选项,awk默认用空格作为分隔符,如果域分隔符不为空格,比方要浏览以”:”作为分隔符的password文件那么必须指明-F选项,如:
awk -F: ‘mands’ input-file
awk脚本文件
将1中的命令行写入一个文件,用bash或sh去解释它,执行命令为shawkscriptfile或 ./awkscriptfile, 后者需要给脚本文件加执行权限,
将所有awk命令写入一个文件awkscriptfile,用$awk -f awkscriptfile input-file(s),例如,
三. awk脚本组成
awk语句都是由模式和动作组成。
域即用分隔符分割的字段,用$1,$2,$3...,$n表示第一个、第二个、第三个,第n个字段, $0表示所有字段。
或
变量提高了awk程序可读性,下面是变量使用的简单例子
本文只是简单的介绍了awk的根本语法,阅读本文后可以用awk完成简单的文本处理功能,awk博大精深,如果要深入学习建议阅读更专业的awk文档和相关书籍,
模板,内容仅供参考。
Linux入门培训教程 linux awk 正则表达式、正则运算符详细介绍

Linux入门培训教程linuxawk 正则表达式、正则运算符详细介绍使用awk作为文本处理工具,正则表达式是少不了的。
要掌握这个工具的正则表达式使用。
其实,我们不必单独去学习它的正则表达式。
正则表达式就像一门程序语言,有自己语法规则已经表示意思。
对于不同工具,其实大部分表示意思相同的。
在linux众多文本处理工具(awk,sed,grep,perl)里面用到正则表达式。
其实就只有3种类型。
详细可以参考:linux shell 正则表达式(BREs,EREs,PREs)差异比较。
只要是某些工具是属于某种类型的正则表达式。
那么它的语法规则基本一样。
通过那篇文章,我们知道awk 的正则表达式,是属于:扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称EREs)。
一、awk Extended Regular Expression (ERES)基础表达式符号介绍字符功能+指定如果一个或多个字符或扩展正则表达式的具体值(在 +(加号)前)在这个字符串中,则字符串匹配。
命令行:awk '/smith+ern/' testfile将包含字符 smit,后跟一个或多个 h 字符,并以字符 ern 结束的字符串的任何记录打印至标准输出。
此示例中的输出是:smithern, harry smithhern, anne?指定如果零个或一个字符或扩展正则表达式的具体值(在 ?(问号)之前)在字符串中,则字符串匹配。
命令行:awk '/smith?/' testfile将包含字符 smit,后跟零个或一个 h 字符的实例的所有记录打印至标准输出。
此示例中的输出是:smith, alansmithern, harry smithhern, annesmitters, alexis|指定如果以 |(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。
Awk学习笔记2010修改版

AWK学习笔记 (1)1.AWK简介 (1)2.AWK编程模型 (2)3. 常量与转义符 (3)4. 变量 (3)4.1用户定义变量 (3)4.2系统变量 (4)4.3字段变量 (4)5 数组 (5)6 操作符 (5)7 流程控制 (6)8 函数 (7)8.1 算术函数 (7)8.2 字符串函数 (7)8.3 字节处理函数 (8)8.4 时间函数 (8)8.5 用户自定义函数 (9)9 输入输出 (9)9.1 输入 (9)9.2 输出 (10)10 总结 (10)11. 参考文献 (10)AWK学习笔记1.AWK简介AWK是Alfred V.Aho, Peter J.Weinberger,Brian W.Kerninghan三人在1977设计和实施的,最初是为了试验Unix中的grep和sed工具怎样可以一般化地在文本之外还能处理数据(grep和sed主要是文本处理工具,但AWK同时善于处理文本与数据)。
AWK名字的来源是创造此语言的三个人的名字首字母缩写。
它的主要来源是grep, sed和C。
后继者主要有Perl。
AWK非常适合于处理格式化的文本和数据,比如改变数据的格式、验证其合法性、寻找某些属性的项、数字求和、输出数据报表等。
数据的结构化越强,使用AWK会越方便。
相比于sed,它有字段(sed只有行而没有内置的字段模型)和数字处理功能。
相比于C和Perl,由于它自动化了某些处理流程(比如读取文件和分割字段),可以使得某些任务以比C 和Perl少得多的代码来完成。
AWK(相对于Perl)的不足:一是各种复杂的数据结构难以实现;二是对Unicode的支持不好。
2.AWK编程模型AWK程序的基本使用语法如下:awk[-v var=value] -Fre'pattern{ action}' var=value datafile(s)awk[-v var=value] -Fre-f scriptfile var=value datafile(s)用命令行与用脚本文件(scriptfie)是等价的。
awk命令、awk编程语言详细介绍和实例

awk命令、awk编程语⾔详细介绍和实例⼀,什么是awkawk是linux下的⼀个命令,他对其他命令的输出,对⽂件的处理都⼗分强⼤,其实他更像⼀门编程语⾔,他可以⾃定义变量,有条件语句,有循环,有数组,有正则,有函数等。
他读取输出,或者⽂件的⽅式是⼀⾏,⼀⾏的读,根据你给出的条件进⾏查找,并在找出来的⾏中进⾏操作,感觉他的设计思想,真的很简单,但是结合实际情况,具体操作起来就没有那么简单了。
他有三种形势,awk,gawk,nawk,平时所说的awk其实就是gawk。
⼆,awk中的记录,域,分割符当我们读取输出时,或者读取⽂件时,读取⼀⾏就是⼀个记录。
记录分割符是默认是回车符,保存在RS,ORS中。
我们从记录中分割出我们要单词,或者是词组等,我们称他为域,域分割符,默认的是空格和TAB銉,保存在内建变量ORS中。
举个例⼦:aaaa:bbbb:ccccccc1111:2343:5t43343上⾯有⼆⾏,这⼆⾏就是⼆个记录,每⾏后⾯的回车呢,就是记录分割符,⾥⾯冒号呢,就是域分割符,分割出来的,aaaa,1111这类东西就是域了。
awk -F: '{print $1}' testfile三,awk的内建变量和运算符1,变量变量描述$n当前记录的第n个字段,字段间由 FS分隔。
$0完整的输⼊记录。
ARGC命令⾏参数的数⽬。
ARGIND命令⾏中当前⽂件的位置(从0开始算)。
ARGV包含命令⾏参数的数组。
CONVFMT数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组。
ERRNO最后⼀个系统错误的描述。
FIELDWIDTHS字段宽度列表(⽤空格键分隔)。
FILENAME当前⽂件名。
FNR同 NR,但相对于当前⽂件。
FS字段分隔符(默认是任何空格)。
IGNORECASE如果为真,则进⾏忽略⼤⼩写的匹配。
NF当前记录中的字段数。
NR当前记录数。
OFMT数字的输出格式(默认值是%.6g)。
awk读书笔记整理

目录1什么是awk、nawk、gawk (4)1.1awk简介 (4)1.2awk版本 (4)2awk的格式 (4)2.1.1 从文件输入 (5)2.1.2 从管道(命令)输入 (5)3awk工作原理 (6)4格式化输出 (7)4.1print函数 (7)4.2OFMT变量 (8)4.3printf函数 (8)5文件中的awk命令 (9)6记录与字段 (10)6.1 记录 (10)6.1.1 记录分隔符 (10)6.1.2 变量$0 (10)6.1.3 变量NR (10)6.2 字段 (11)6.3 字段分隔符 (11)6.3.1 输入字段分隔符 (11)6.3.2 从命令行改变字段分隔符 (11)6.3.3 使用多个字段分隔符 (12)6.3.4 输出字段分隔符 (12)7模式与操作 (12)7.1 模式 (12)7.2 操作 (13)8正则表达式 (13)8.1匹配整行 (14)8.2匹配操作符~ (15)9阶段复习 (15)9.1简单的模式匹配 (16)9.2简单的操作 (16)9.3操作与模式组合的正则表达式 (17)9.4输入字段分隔符 (18)9.5编写awk脚本 (20)10比较表达式 (21)10.1关系运算符 (21)10.2条件表达式 (22)10.3算术运算 (23)10.4逻辑操作符和复合模式 (23)10.5范围模式 (24)11变量 (25)11.1数值变量和字符串变量 (25)11.2用户自定义变量 (25)11.2.1格式 (25)11.2.2命令行上的用户自定义变量 (26)11.2.3字段变量 (26)11.2.4内置变量 (26)11.2.5 BEGIN模式 (28)11.2.6 END模式 (28)12重定向和管道 (29)12.1 重定向 (29)12.1.1 输出重定向 (29)12.1.2 输入重定向 (29)12.2 管道 (30)12.2.1 打开管道 (30)12.2.2 关闭文件和管道 (31)12.2.3 system函数 (31)13条件语句 (32)13.1 if语句 (32)13.2 if/else语句 (32)13.3 if/else和else if语句 (33)14循环 (33)14.1 while循环 (33)14.2 for循环 (33)14.3 循环控制break/continue语句 (34)15程序控制语句 (34)15.1 next语句 (34)15.2 exit语句 (34)16数组 (35)16.1关联数组的下标 (35)16.1.1 特殊for循环 (35)16.1.2 用字符串作为数组下标 (36)16.1.3 用字段的值作为数组下标 (37)16.1.4 多维数组 (37)17awk的内置函数 (38)17.1 字符串函数 (38)17.1.1 sub和gsub函数 (38)17.1.2 index函数 (39)17.1.3 length函数 (39)17.1.4 substr函数 (40)17.1.5 match函数 (40)17.1.6 split函数 (40)17.1.7 sprintf函数 (41)17.1.8 toupper和tolower函数 (41)17.2 算术函数 (41)17.3 时间函数 (42)17.3.1 systime (42)17.3.2 strftime (42)17.4 命令行参数 (43)17.5 读输入getline (44)17.6 控制函数 (44)17.7 用户自定义函数 (44)17.8 awk/gawk命令行选项 (45)awk读书笔记整理1什么是awk、nawk、gawkawk是一种用于处理数据和生成报告的UNIX编程语言。
awk学习笔记

shell echo 知多少-n, -e 主要是参数3) 別人echo、你也echo ,是問echo 知多少?承接上一章所介紹的 command line ,這裡我們用echo 這個命令加以進一步說明。
溫習---標準的command line 包含三個部件:* command_name option argumentecho 是一個非常簡單、直接的Linux 命令:* 將argument 送出至標準輸出(STDOUT),通常就是在監視器(monitor)上輸出。
(註:stdout 我們日後有機會再解說,或可先參考如下討論:/forum/viewtopic.php?t=191375 )為了更好理解,不如先讓我們先跑一下echo 命令好了:1.$ echo2.3.$复制代码你會發現只有一個空白行,然後又回到shell prompt 上了。
這是因為echo 在預設上,在顯示完argument 之後,還會送出一個換行符號(new-line charactor)。
但是上面的command 並沒任何的argument ,那結果就只剩一個換行符號了...若你要取消這個換行符號,可利用echo 的-n option :1.$ echo -n2.$复制代码不妨讓我們回到command line 的概念上來討論上例的echo 命令好了:* command line 只有command_name(echo) 及option(-n),並沒有任何argument 。
要想看看echo 的argument ,那還不簡單﹗接下來,你可試試如下的輸入:1.$ echo first line2.first line3.$ echo -n first line4.first line $复制代码於上兩個echo 命令中,你會發現argument 的部份顯示在你的熒幕,而換行符號則視-n option 的有無而別。
很明顯的,第二個echo 由於換行符號被取消了,接下來的shell prompt 就接在輸出結果同一行了...^_^事實上,echo 除了-n options 之外,常用選項還有:-e :啟用反斜線控制字符的轉換(參考下表)-E:關閉反斜線控制字符的轉換(預設如此)-n :取消行末之換行符號(與-e 選項下的\c 字符同意)關於echo 命令所支援的反斜線控制字符如下表:\a:ALERT / BELL (從系統喇叭送出鈴聲)\b:BACKSPACE ,也就是向左退格鍵\c:取消行末之換行符號\E:ESCAPE,跳脫鍵\f:FORMFEED,換頁字符\n:NEWLINE,換行字符\r:RETURN,回車鍵\t:TAB,表格跳位鍵\v:VERTICAL TAB,垂直表格跳位鍵\n:ASCII 八進位編碼(以x 開首為十六進位)\\:反斜線本身(表格資料來自O'Reilly 出版社之Learning the Bash Shell, 2nd Ed.) 或許,我們可以透過實例來了解echo 的選項及控制字符:例一:1.$ echo -e "a\tb\tc\nd\te\tf"2. a b c3. d e f复制代码上例運用\t 來區隔abc 還有def ,及用\n 將def 換至下一行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Awk学习笔记
整理:Jims of 肥肥世家
<jims.yang@>
Copyright © 2004 本文遵从GPL协议,欢迎转载、修改、散布。
第一次发布时间:2004年8月6日
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 Aho、Brian Kernighan、Peter Weinberger。
gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
下面介绍的
IGNORECASE如果为真,则进行忽略大小写的匹配。
NF当前记录中的字段数。
NR当前记录数。
OFMT数字的输出格式(默认值是%.6g)。
OFS输出字段分隔符(默认值是一个空格)。
ORS输出记录分隔符(默认值是一个换行符)。
RLENGTH由match函数所匹配的字符串的长度。
RS记录分隔符(默认是一个换行符)。
RSTART由match函数所匹配的字符串的第一个位置。
SUBSEP数组下标分隔符(默认值是\034)。
5. awk运算符
Table 2. 运算符
运算符描述
= += -= *= /= %= ^= **=赋值
?:C条件表达式
||逻辑或
&&逻辑与
~ ~!匹配正则表达式和不匹配正则表达式
< <= > >= != ==关系运算符
空格连接
+ -加,减
* / &乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ --增加或减少,作为前缀或后缀
$字段引用
in数组成员
6. 记录和域
6.1. 记录
awk把每一个以换行符结束的行称为一个记录。
记录分隔符:默认的输入和输出的分隔符都是回车,保存在内建变量ORS和RS中。
$0变量:它指的是整条记录。
如$ awk '{print $0}' test将输出test文件中的所有记录。
变量NR:一个计数器,每处理完一条记录,NR的值就增加1。
如$ awk '{print NR,$0}' test将输出test文件中所有记录,并在记录前显示记录号。
6.2. 域
记录中每个单词称做“域”,默认情况下以空格或tab分隔。
awk可跟踪域的个数,并在内建变量NF中保存该值。
如$ awk '{print $1,$3}' test将打印test文件中第一和第三个以空格分开的列(域)。
6.3. 域分隔符
内建变量FS保存输入域分隔符的值,默认是空格或tab。
我们可以通过-F命令行选项修改FS的值。
如$ awk -
F: '{print $1,$5}' test将打印以冒号为分隔符的第一,第五列的内容。
可以同时使用多个域分隔符,这时应该把分隔符写成放到方括号中,如$awk -F'[:\t]' '{print $1,$3}' test,表示以空格、冒号和tab作为分隔符。
输出域的分隔符默认是一个空格,保存在OFS中。
如$ awk -F: '{print $1,$5}' test,$1和$5间的逗号就是OFS的值。
7. gawk专用正则表达式元字符
一般通用的元字符集就不讲了,可参考我的Sed和Grep学习笔记。
以下几个是gawk专用的,不适合unix版本的awk。
\Y
匹配一个单词开头或者末尾的空字符串。
\B
匹配单词内的空字符串。
\<
匹配一个单词的开头的空字符串,锚定开始。
\>
匹配一个单词的末尾的空字符串,锚定末尾。
\w
匹配一个字母数字组成的单词。
\W
匹配一个非字母数字组成的单词。
\‘
匹配字符串开头的一个空字符串。
\'
匹配字符串末尾的一个空字符串。
8. POSIX字符集
可参考我的Grep学习笔记
9. 匹配操作符(~)
用来在记录或者域内匹配正则表达式。
如$ awk '$1 ~/^root/' test将显示test文件第一列中以root开头的行。
10. 比较表达式
conditional expression1 ? expression2: expression3,例如:$ awk '{max = {$1 > $3} ? $1: $3: print max}' test。
如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。
$ awk '$1 + $2 < 100' test。
如果第一和第二个域相加大于100,则打印这些行。
$ awk '$1 > 5 && $2 < 10' test,如果第一个域大于5,并且第二个域小于10,则打印这些行。
$ cat /etc/passwd | awk -F: '\
NF != 7{\
printf("line %d,does not have 7 fields:%s\n",NR,$0)}\
$1 !~ /[A-Za-z0-9]/{printf("line %d,non alpha and numeric user id:%d: %s\n,NR,$0)}\ $2 == "*" {printf("line %d, no password: %s\n",NR,$0)}'。