9. 匹配操作符(~)
用来在记录或者域内匹配正则表达式。如gawk.exe "$1 ~/^root/" test.txt将显示test文件第一列中以root开头的行。
10. 比较表达式
conditional expression_r1 ? expression_r2: expression_r3,例如:gawk.exe "{max = {$1 > $3} ? $1: $3: print max}" test。如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。
gawk.exe "$1 + $2 < 100" test。如果第一和第二个域相加大于100,则打印这些行。
gawk.exe "$1 > 5 && $2 < 10" test,如果第一个域大于5,并且第二个域小于10,则打印这些行。
11. 范围模板
范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现之间所有行。如果有一个模板没出现,则匹配到开头或末尾。如gawk.exe "/root/,/mysql/" test将显示root第一次出现到mysql第一次出现之间的所有行。
13. 几个实例
*
gawk.exe "/^(no|so)/" test.txt-----打印所有以模式no或so开头的行。
*
gawk.exe "/^[ns]/{print $1}" test.txt -----如果记录以n或s开头,就打印这个记录。
*
gawk.exe "$1 ~/[0-9][0-9]$/(print $1)" test.txt -----如果第一个域以两个数字结束就打印这个记录。
*
gawk.exe "$1 == 100 || $2 < 50" test.txt -----如果第一个或等于100或者第二个域小于50,则打印该行。
*
gawk.exe "$1 != 10" test.txt -----如果第一个域不等于10就打印该行。
*
gawk.exe "/test/{print $1 + 10}" test.txt -----如果记录包含正则表达式test,则第一个域加10并打印出来。
*
gawk.exe "{print ($1 > 5 ? "ok "$1: "error"$1)}" test.txt -----如果第一个域大于5则打印问号后面的表达式值,否则打印冒号后面的表达式值。
*
gawk.exe "/^root/,/^mysql/" test.txt ----打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的所有记录。如果找到一个新的正则表达式root开头的记录,则继续打印直到下一个以正则表达式mysql开头的记录为止,或到文件末尾。
14.gawk编程
14.1. 变量
*
在gawk中,变量不需要定义就可以直接使用,变量类型可以是数字或字符串。
*
赋值格式:Variable = expression_r,如gawk.exe "$1 ~/test/{count = $2 + $3; print count}" test.txt,上式的作用是,gawk先扫描第一个域,一旦test匹配,就把第二个域的值加上第三个域的值,并把结果赋值给变量count,最后打印出来。
*
gawk 可以在命令行中给变量赋值,然后将这个变量传输给gawk脚本。如gawk.exe –F”:” -f awkscript month=4 year=2004 test,上式的month和year都是自定义变量,分别被赋值为4和2004。在awk脚本中,这些变量使用起来就象是在脚本中建立的一样。注意,如果参数前面出现test,那么在BEGIN语句中的变量就不能被使用。
*
域变量也可被赋值和修改,如gawk.exe "{$2 = 100 + $1; print }" test.txt,上式表示,如果第二个域不存在,gawk将计算表达式100加$1的值,并将其赋值给$2,如果第二个域存在,则用表达式的值覆盖$2原来的值。再例如:gawk.exe "$1 == "root"{$1 ="test";print}" test.txt,如果第一个域的值是“root”,则把它赋值为“test”,注意,字符串一定要用双引号。
*
内建变量的使用。变量列表在前面已列出,现在举个例子说明一下。gawk.exe -F: "{IGNORECASE=1; $1 == "MARY"{print NR,$1,$2,$NF}"test,把IGNORECASE设为1代表忽略大小写,打印第一个域是mary的记录数、第一个域、第二个域和最后一个域。
14.2. BEGIN模块
BEGIN 模块后紧跟着动作块,这个动作块在awk处理任何输入文件之前执行。所以它可以在没有任何输入的情况下进行测试。它通常用来改变内建变量的值,如OFS, RS和FS等,以及打印标题。如:gawk.exe "BEGIN{FS=":"; OFS="\t"; ORS="\n\n"}{print $1,$2,$3} test.txt。上式表示,在处理输入文件以前,域分隔符(FS)被设为冒号,输出文件分隔符(OFS)被设置为制表符,输出记录分隔符(ORS)被设置为两个换行符。gawk.exe
"BEGIN{print "TITLE TEST"}只打印标题。
14.3. END模块
END不匹配任何的输入文件,但是执行动作块中的所有动作,它在整个输入文件处理完成后被执行。如gawk.exe "END{print "The number of records is" NR}" <wbr>test.txt,上式将打印所有被处理的记录数。</wbr>
14.4. 重定向和管道
*
awk 可使用shell的重定向符进行重定向输出,如:gawk.exe "$1 = 100 {print $1 > "output_file" }" <wbr>test.txt。上式表示如果第一个域的值等于100,则把它输出到output_file中。也可以用>>来重定向输出,但不清空文件,只做追加操作。</wbr>
*
输出重定向需用到getline函数。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。如:
gawk.exe "BEGIN{ "date" | getline d; print d}" <wbr>test.txt。执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量d,并打印它。</wbr>
gawk.exe "BEGIN{"date" | getline d; split(d,mon); print mon[2]}" test。执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给d,split函数把变量d转化成数组mon,然后打印数组mon的第二个元素。
gawk.exe "BEGIN{while( "ls" | getline) print}",命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为 BEGIN块在打开输入文件前执行,所以可以忽略输入文件。
gawk.exe "BEGIN{printf "What is your name?"; getline name < "/dev/tty" } $1 ~name {print "Found" name on line ", NR "."} END{print "See you," name "."} test.txt。在屏幕上打印”What is your name?",并等待用户应答。当一行输入完毕后,getline函数从终端接收该行输入,并把它储存在自定义变量name中。如果第一个域匹配变量
name的值,print函数就被执行,END块打印See you和name的值。
gawk.exe "BEGIN{while (getline < "/etc/passwd" > 0) lc++; print lc}"。awk将逐行读取文件/etc/passwd的内容,在到达文件末尾前,计数器lc一直增加,当到末尾时,打印lc的值。注意,如果文件不存在,getline返回-1,如果到达文件的末尾就返回0,如果读到一行,就返回1,所以命令 while (getline < "/etc/passwd")在文件不存在的情况下将陷入无限循环,因为返回-1表示逻辑真。
*
可以在awk中打开一个管道,且同一时刻只能有一个管道存在。通过close()可关闭管道。如:gawk.exe "{print $1, $2 | "sort" }" test END {close("sort")}。awd把print语句的输出通过管道作为linux命令sort的输入,END块执行关闭管道操作。
*
system函数可以在awk中执行linux的命令。如:gawk.exe "BEGIN{system("clear")"。
*
fflush函数用以刷新输出缓冲区,如果没有参数,就刷新标准输出的缓冲区,如果以空字符串为参数,如fflush(""),则刷新所有文件和管道的输出缓冲区。
分享到:
相关推荐
gawk 是 GNU 的 awk,具有很强的文本处理功能,简洁优美. awk 是一个程式语言,对于文本处理具有很强的功能。对於文字档里的资料做修改、比对、抽取等的处理,awk 能够以很短的程式 轻易地完成。 awk 能够依照使用...
可以在windows环境下使用的awk,最新版本4.2.1。 解压zip文件,把解压后文件夹下面的bin目录添加到系统环境变量里面。
gawk windows版本的gawk 一个功能强大的文本编辑器
Gawk: pattern scanning and processing language Version 3.1.6 Description Several kinds of tasks occur repeatedly when working with text files. You might want to extract certain lines and discard ...
可以在windows系统中使用linux中的awk命令。具体使用方法请参照linux版本的awk使用方法。 可以在windows系统中使用linux中的awk命令。具体使用方法请参照linux版本的awk使用方法
gawk-3.1.6-1-bin windows的awk 最新版,安装后可在windows操作系统上像在linux上使用awk命令。
1.GAWK:Effective AWK Programming_Edition 4.2.dvi 2.GAWK:Effective AWK Programming_Edition 4.2.html 3.GAWK:Effective AWK Programming_Edition 4.2.pdf 4.GAWK:Effective AWK Programming_Edition 4.2.txt
windows上跑的awk,把zip文件解压,然后把bin目录加到环境变量里面,亲测有效
Generic Mapping Tools,地球科学常用制图软件。
处理文本文件时,会重复出现多种任务。 您可能想要提取某些行并丢弃其余行。 或者,您可能需要在出现某些特定模式... 这意味着所有正确编写的 awk 程序都应该使用 gawk。 因此,我们通常不区分 gawk 和其他 awk 实现。
部分工具独立编译,如file、lspci、nano、vim、gawk、aria2c、wget等,部分工具采用busybox内置命令,如ls、bash、clear、dos2unix、unix2dos等,部分工具采用第三方软件或windows系统命令用批处理文件模拟,如...
windows下的uniq,很好用的小东西,配合Gawk使用更佳。
包含命令:awk、cat、cut、diff、echo、gawk、grep、head、sed、sort、tac、tail、tr、uniq、wc 可以在windows上cmd窗口显示彩色文字,用法:echo.exe -e "\033[32;1mGREEN\033[0m
awk for Windows 2021年4月最新版
在基本层,MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时间库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95 发行版以上的 Windows OS 有效,使用基本运行...
常用unix工具的windows编译版。包内为许多独立exe文件,没有dll依赖,无需安装。 文件列表:ansi2knr.exe(以下省略.exe扩展名),basename,bc,bison,bjam,bunzip2,bzip2,bzip2recover,cat,chgrp,chmod,chown,cksum,...
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。 实际上 MinGW 并不是一个 单纯的C/C++ 编译器,而是一套 GNU 工具集合。除...
除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。 开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU ...
使用方法,解压到本地目录,配置path,即可在dos下使用linux命令。 windows下能直接执行的linux命令,基本包括日常所有,如:[.exe grolbp.exe regtool.exe a2p.exe grolj4.exe rm.exe a2p5.10.0.exe grops.exe ...
Gawk for Windows -------------------------------------------------------------------------------- Gawk: pattern scanning and processing language Version 3.1.6 Description Several kinds of tasks ...