awk语法
通过awk命令统计文件中的行数字数和字符数

通过awk命令统计文件中的行数字数和字符数awk是一种强大的文本处理工具,它可以方便地对文件进行分析和处理。
在本文中,我们将使用awk命令来统计文件中的行数和字符数。
使用awk命令统计行数和字符数的基本语法是:```awk '{行数计数器++} {字符数计数器+=length($0)} END {print "行数:"行数计数器, "字符数:"字符数计数器}' 文件名```其中,`行数计数器++`用于统计行数,每当awk读取一行文本时,行数计数器会自动加1。
`字符数计数器+=length($0)`用于统计字符数,每当awk读取一行文本时,字符数计数器会自动加上该行的字符数。
下面是一个示例,我们将使用awk命令统计一个名为example.txt的文件中的行数和字符数:```awk '{lines++} {chars+=length($0)} END {print "行数:" lines, "字符数:" chars}' example.txt```以上命令将输出文件example.txt中的行数和字符数。
实际使用中,我们可以将以上命令封装成一个shell脚本,以方便多次使用和批量处理。
以下是一个简单的shell脚本示例:```shell#!/bin/bash# 输入文件名read -p "请输入文件名: " filename# 统计行数和字符数count=$(awk '{lines++} {chars+=length($0)} END {print "行数:" lines, "字符数:" chars}' $filename)# 输出统计结果echo $count```保存脚本为count_lines_chars.sh,并给予执行权限。
awkk命令用法

awkk命令用法
awk是一个强大的文本处理工具,它使用一种特定的语法,可以用来进行模式扫描和文本/数据提取。
awk的基本语法如下:
```
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
```
首先,执行关键字BEGIN标识的{}中的命令。
完成BEGIN大括号中命令的后,开始执行body命令。
逐行读取数据,默认读到分割的内容为一条记录,其实就是行的概念。
将记录按照指定的分隔符划分为字段,其实就是列的概念。
循环执行body块中的命令,每读取一行,执行一次body,最终完成body执行。
最后,执行END命令,通常会在END中输出最后的结果。
awk是输入驱动的,有多少输入行,就会执行多少次body命令。
awk的强大之处在于它支持各种强大的文本处理功能,包括字符串操作、正则表达式匹配、数学运算等。
同时,awk还支持变量和数组,可以方便地进行数据处理和转换。
此外,awk还有许多内置函数和选项,可以用来扩展其功能和灵活性。
例如,可以通过-F选项指定字段分隔符,通过-f选项指定外部函数文件等。
总的来说,awk是一个非常强大的文本处理工具,它可以用来进行数据提取、转换、报告生成等任务。
如果你需要进行文本处理工作,awk绝对是一个值得学习和掌握的工具。
window awk命令用法

window awk命令用法`awk`命令是一种文本处理工具,它逐行扫描输入文件,根据指定的规则进行模式匹配和处理。
以下是`awk`命令的一些常见用法:1. 基本语法:```awk 'pattern { actions }' input_file```其中,`pattern`是用来匹配文本行的表达式,`actions`是在匹配到文本行时要执行的动作,`input_file`是要处理的输入文件。
2. 打印整行:```awk '{ print }' input_file```上述命令将打印输入文件中的每一行。
3. 打印指定字段:```awk '{ print $1, $NF }' input_file```上述命令将打印输入文件中每一行的第一个字段和最后一个字段。
4. 按条件筛选行:```awk '/pattern/ { print }' input_file```上述命令将打印含有指定模式的行。
5. 使用分隔符:```awk -F':' '{ print $1, $NF }' input_file```上述命令将使用冒号作为分隔符,打印输入文件中每一行的第一个字段和最后一个字段。
6. 使用内置变量:```awk '{ sum += $1 } END { print sum }' input_file```上述命令将计算输入文件中第一个字段的总和并打印。
7. 修改字段分隔符:```awk 'BEGIN { FS=":" } { print $1, $NF }' input_file```上述命令将在处理输入文件之前修改字段分隔符为冒号。
这只是`awk`命令的一些常见用法示例,`awk`有许多其他功能和选项,可以根据需要进一步探索。
awk用法技巧

这样可以清楚的看出,awk是一行一行读取文本,然后按照代码的前后顺序执行。但如果action中 包含next或exit时,有所不同: awk ‘$1==3{printf “|| “$0;next}{printf “@@ “$0}{print $0}’ file @@ 11 @@ 22 || 3@@ 44 @@ 55
awk ‘$1==3{printf “|| “$0;exit}@@ 11 @@ 22 || 3
awk ‘{print “NR = ” NR ” FNR = ” FNR, $0}’ file file NR = 1 FNR = 1 a NR = 2 FNR = 2 b NR = 3 FNR = 3 c NR = 4 FNR = 4 d NR = 5 FNR = 5 e
NR = 6 FNR = 6 f NR = 7 FNR = 1 a NR = 8 FNR = 2 b NR = 9 FNR = 3 c NR = 10 FNR = 4 d NR = 11 FNR = 5 e NR = 12 FNR = 6 f
4. 为什么OFS不起作用? 先看一个例子: echo ‘aaa bbb ccc ddd aaa bbb ccc ddd aaa bbb ccc ddd aaa bbb ccc ddd’ |awk -v OFS=”|” ‘{print $0}’ aaa bbb ccc ddd aaa bbb ccc ddd aaa bbb ccc ddd aaa bbb ccc ddd 上面的例子中OFS为什么没有生效呢,原因是OFS指的是输出字段分隔符,所以必须对字段进行操 作时OFS才会起作用,正确的方法应该是: echo ‘aaa bbb ccc ddd aaa bbb ccc ddd aaa bbb ccc ddd aaa bbb ccc ddd’ |awk -v OFS=”|” ‘{$1=$1;print $0}’ aaa|bbb|ccc|ddd aaa|bbb|ccc|ddd aaa|bbb|ccc|ddd aaa|bbb|ccc|ddd
awk system 参数

awk system 参数awk是一种强大的文本处理工具,在Linux环境下广泛使用。
它具有很强的过滤和操作文本的能力,同时可以与Linux系统进行良好的集成,如使用awk system参数执行系统命令。
下面我们将分步骤阐述awk system参数的详细使用方法:步骤一:了解awk命令的基本语法awk命令的基本语法如下:>awk [选项参数] 'pattern{action}' file其中的pattern表示模式匹配,action表示需要执行的操作。
它的工作原理是从文件file中逐行读取并处理,根据模式匹配执行对应的操作。
步骤二:使用awk system参数执行系统命令awk系统参数可以与awk命令集成,用于执行系统命令。
system参数的基本语法如下:>system("command")其中的command表示需要执行的系统命令。
使用awk system参数可以在awk程序中执行任何有效的Linux系统命令。
例如,我们可以在awk程序中使用system参数来执行系统命令ls,可以将当前目录下的文件名列出来,如下所示:$ ls | awk '{print $1}' # 输出当前目录下的文件名另外,我们还可以在awk程序中使用system参数来执行Linux命令df,可以列出磁盘分区的统计信息,如下所示:$ df | awk '{print $1,$2,$3}' # 输出df命令输出的磁盘分区信息步骤三:使用awk system参数进行文件操作awk system参数还可以用于执行文件操作。
例如,我们可以在awk程序中使用system参数来运行Linux命令touch,可以创建一个新文件,如下所示:$ awk 'BEGIN{system("touch test.txt")}' # 创建一个新文件test.txt我们还可以在awk程序中使用system参数来执行Linux命令rm,可以删除一个指定的文件,如下所示:$ awk 'BEGIN{system("rm test.txt")}' # 删除test.txt文件总结以上就是awk system参数的详细使用方法。
awk语法

简介搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd搜索/etc/passwd有root关键字的所有行,并显示对应的shell# awk -F: '/root/{print $7}' /etc/passwd/bin/bash这里指定了action{print $7}awk内置变量awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。
ARGC 命令行参数个数ARGV 命令行参数排列ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,等价于命令行 -F选项NF 浏览记录的域的个数NR 已读的记录数OFS 输出域分隔符ORS 输出记录分隔符RS 控制记录分隔符此外,$0变量是指整条记录。
$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:#awk -F ':''{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwdfilename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/b in/bashfilename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr /sbin:/bin/shfilename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/ shfilename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/ sh使用printf替代print,可以让代码更加简洁,易读awk -F ':''{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwdprint和printfawk中同时提供了print和printf两种打印输出的函数。
Linux命令高级技巧使用awk命令进行文本处理和数据提取
Linux命令高级技巧使用awk命令进行文本处理和数据提取Linux命令高级技巧:使用awk命令进行文本处理和数据提取在Linux系统中,awk是一种强大的文本处理工具,它可以用于处理数据文件、生成报表以及提取文本中的特定信息。
awk命令的灵活和高效使得它成为Linux用户必备的工具之一。
本文将介绍awk命令的基本用法和高级技巧,帮助读者更好地利用awk进行文本处理和数据提取。
1. awk命令基本语法和工作原理awk命令的基本语法为:```awk 'pattern { action }' filename```其中,pattern是用于匹配文本的模式,action是在匹配成功后执行的操作。
awk处理文本的方式是逐行读取文件,按照指定的模式进行匹配,并执行相应的操作。
操作可以是打印、计算、替换等。
下面是一个简单的示例:```awk '/keyword/ { print $1 }' filename```该命令表示在filename文件中匹配包含关键字"keyword"的行,并打印每行的第一个字段。
2. 使用awk命令进行文本处理awk命令在文本处理方面有着广泛的应用。
它可以对文本进行排序、过滤、计算和格式化等操作。
下面介绍几个常用的awk命令技巧。
2.1 文本过滤和匹配通过awk命令可以方便地对文本进行过滤和匹配。
例如,要过滤出包含特定关键字的行,可以使用如下命令:```awk '/keyword/' filename```该命令将输出filename文件中所有包含关键字"keyword"的行。
2.2 提取字段awk命令可以提取文本中的指定字段。
字段之间以空格或制表符分隔,默认情况下,awk将每行数据的第一个字段标记为$1,第二个字段标记为$2,依此类推。
例如,要提取文件中的第二个字段,可以使用如下命令:```awk '{ print $2 }' filename```该命令将输出filename文件中每一行的第二个字段。
awk 文件比对用法
awk 文件比对用法摘要:1.简介2.awk 命令基本用法3.awk 文件比对用法a.语法b.示例4.结论正文:awk 是一种文本处理工具,广泛应用于Linux 和Unix 系统。
它通过正则表达式匹配文本行,然后根据规则对匹配的行执行相应的操作。
awk 具有强大的功能,可以进行简单的文本处理任务,如分割、合并、过滤和排序等。
awk 命令的基本用法如下:```awk [选项] "pattern {action}" input_file```其中,`pattern`是正则表达式,用于匹配输入文件的文本行;`action`是针对匹配行的操作,可以是一条命令或多个命令组成的命令序列;`input_file`是输入文件。
在本文中,我们将重点介绍awk 文件的比对用法。
awk 文件比对主要用于比较两个或多个文本文件之间的差异。
它的语法如下:awk "FNR==NR {a[$0]; next} !($0 in a)" file1 file2```这个命令的原理是:首先读取第一个文件(file1),将每行文本存储在名为$0的数组中。
当读取第二个文件(file2)时,awk 会逐行比较新读取的文本行是否存在于数组中。
如果不存在,说明这是新的一行,将这一行添加到数组中。
这样,我们就可以得到两个文件之间的不同行。
下面是一个示例:假设我们有两个文件file1 和file2,它们的文本内容如下:file1:applebananaorangefile2:applebananapear我们使用awk 命令比较这两个文件:```awk "FNR==NR {a[$0]; next} !($0 in a)" file1 file2```输出结果如下:pear```这个命令告诉我们,file2 中存在file1 不包含的行,即“pear”。
总之,awk 文件比对用法是一种强大的文本比较工具。
awk所有常用语法
awk所有常⽤语法awk [OPTIONS] PROGRAM FILE...选项:-F 指定分隔符-f 引⽤awk脚本-v VAR=VALUE 定义⼀个变量传递给PROGRAM,但是这⾥的变量BEGIN读不了,只有PROGRAM和END才能读。
PROGRAM由“ PATTERNS{ACTION;ACTION...} ”组成PATTERNS和ACTION可以其中⼀个不写PATTERNS不写表⽰所有记录。
ACTION不写默认为print $0记录(record)和字段(filed):记录是根据RS变量的值分割,默认情况下是换⾏符,也就是⼀⾏就是⼀个记录。
字段是根据FS变量的值定义的,⽤于分割记录成字段。
引⽤记录的字段:$0 代表整个记录$1 第⼀个字段$N 第N个字段AWK的变量:1、内建变量,由AWK⾃⾝内置的⼀些变量。
FILENAME:⽂件名。
FS:字段分隔符,默认是空格和制表符。
OFS:每个字段默认的输出分割符号。
RS:记录分隔符,默认是换⾏符。
ORS:每个记录默认的输出分割符号。
NR:当前记录所在的⾏号(多个⽂件时会重置⾏号)FNR:当多个⽂件时不会重置⾏号。
NF:当即字段的段号。
IGNORECASE:匹配时是否忽略⼤⼩写。
RLENGTH:由match函数所匹配到的⼦字符串的长度。
RSTART:由match函数所匹配到的⼦字符串的起始位置2、⽤户⾃定义变量·通过”awk -v 变量名=变量值“ 定义并使⽤。
·在ACTION内部直接定义。
变量的值可以使⽤0开头表⽰8进制,0x开头表⽰16进制。
使⽤变量:不管时内建变量还是⽤户⾃定义变量,直接写变量名即可,不需要加”$“符号来引⽤变量。
但是for循环内的变量需要加”$“来引⽤。
PATTERNS: ⽤于对判断是否对当前记录应⽤ACTION这⾥的PATTERN不单单可以使⽤正则表达式,还可以是条件判断等。
具体如下:1、/正则表达式/2、/正则/ && /正则/3、/正则/ || /正则/4、PATTERN ? PATTERN : PATTERN #(三元运算符)5、!PATTERN # 取反6、PATTERN,PATTERN # 多个PATTERN7、BEGIN8、END9、匹配操作符~ PATTERN 匹配指定正则表达式!~ PATTERN 不匹配指定正则表达式10、算数运算符++ --+= -= *= /= %=+ - * / %11、逻辑运算&&||!awk -F: '$1~/^r/ && $3>1000{print $0}' /etc/passwd12、(PATTERN) 优先计算括号内的表达式如: awk -F: '!($3>1000){print $1,$3}'ACTION:print ITEM,ITEM... : # 打印⽂本,ITEM之间默认⽤OFS变量的值隔开输出。
Linux命令高级技巧使用awk命令进行统计和计算
Linux命令高级技巧使用awk命令进行统计和计算在Linux操作系统中,awk命令是一种非常强大且灵活的文本处理工具。
它可以用于对文本文件进行数据提取、处理和分析。
在本文中,我们将介绍一些高级的awk命令技巧,重点是如何使用awk命令进行统计和计算。
一、awk命令简介awk是一种处理文本文件的命令行工具,在Linux系统中默认安装。
它以逐行扫描文本文件的方式工作,根据指定的规则来处理每一行的数据。
awk命令的语法通常为:```awk 'pattern {action}' file```其中,pattern用于匹配文本行,而action用于对匹配的行执行操作。
可以通过在pattern和action之间使用一些特殊的操作符和函数来实现更复杂的处理逻辑。
二、使用awk命令进行统计1. 行数统计使用awk命令可以轻松实现对文本文件行数的统计。
只需要将每一行视为一个记录,通过打印记录的数量即可得到行数。
具体命令如下:awk 'END{print NR}' file```其中,NR是awk内置的变量,表示当前记录(行)的数量。
使用END关键字可以确保在所有行处理完毕后才执行打印操作。
2. 字符数统计awk命令也可以用于统计文本文件中的字符数。
我们可以使用length函数来获取每一行的字符数,并将其累加得到总字符数。
具体命令如下:```awk '{count += length($0)} END{print count}' file```其中,$0表示当前行的内容,length函数用于计算当前行的字符数。
同样地,END关键字用于在所有行处理完毕后执行打印操作。
三、使用awk命令进行计算除了统计功能,awk命令还可以进行一些简单的数学计算。
我们可以使用awk的内置运算符和数学函数来实现。
1. 求和计算使用awk命令可以轻松实现对文本文件中数字列的求和计算。
假设要对某一列的数字进行求和,可以使用如下命令:awk '{sum += $1} END{print sum}' file```其中,$1表示当前行的第一个字段(列),sum是一个变量,用于累加每个字段的值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux shell awk 语法发布时间:2006-01-02 03:26:00 来源:China Unix博客作者:China Unix 博客点击:571linux shell awk 语法Awk 是一种非常好的语言,同时有一个非常奇怪的名称。
在本系列(共三篇文章)的第一篇文章中,Daniel Robbins 将使您迅速掌握awk 编程技巧。
随着本系列的进展,将讨论更高级的主题,最后将演示一个真正的高级awk 演示程序。
捍卫awk在本系列文章中,我将使您成为精通awk 的编码人员。
我承认,awk 并没有一个非常好听且又非常“时髦”的名字。
awk 的GNU 版本(叫作gawk)听起来非常怪异。
那些不熟悉这种语言的人可能听说过"awk",并可能认为它是一组落伍且过时的混乱代码。
它甚至会使最博学的UNIX 权威陷于错乱的边缘(使他不断地发出"kill -Array!" 命令,就象使用咖啡机一样)。
的确,awk 没有一个动听的名字。
但它是一种很棒的语言。
awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计。
与某些语言不同,awk 的语法较为常见。
它借鉴了某些语言的一些精华部分,如 C 语言、python 和bash(虽然在技术上,awk 比python 和bash 早创建)。
awk 是那种一旦学会了就会成为您战略编码库的主要部分的语言。
第一个awk让我们继续,开始使用awk,以了解其工作原理。
在命令行中输入以下命令:$ awk ’{ print }’ /etc/passw d您将会见到/etc/passwd 文件的内容出现在眼前。
现在,解释awk 做了些什么。
调用awk 时,我们指定/etc/passwd 作为输入文件。
执行awk 时,它依次对/etc/passwd 中的每一行执行print 命令。
所有输出都发送到stdout,所得到的结果与与执行catting /etc/passwd完全相同。
现在,解释{ print } 代码块。
在awk 中,花括号用于将几块代码组合到一起,这一点类似于 C 语言。
在代码块中只有一条print 命令。
在awk 中,如果只出现print 命令,那么将打印当前行的全部内容。
这里是另一个awk 示例,它的作用与上例完全相同:$ awk ’{ print $0 }’ /etc/passwd在awk 中,$0 变量表示整个当前行,所以print 和print $0 的作用完全一样。
如果您愿意,可以创建一个awk 程序,让它输出与输入数据完全无关的数据。
以下是一个示例:$ awk ’{ print "" }’ /etc/passwd只要将"" 字符串传递给print 命令,它就会打印空白行。
如果测试该脚本,将会发现对于/etc/passwd 文件中的每一行,awk 都输出一个空白行。
再次说明,awk 对输入文件中的每一行都执行这个脚本。
以下是另一个示例:$ awk ’{ print "hiya" }’ /etc/passwd运行这个脚本将在您的屏幕上写满hiya。
多个字段awk 非常善于处理分成多个逻辑字段的文本,而且让您可以毫不费力地引用awk 脚本中每个独立的字段。
以下脚本将打印出您的系统上所有用户帐户的列表:$ awk -F":" ’{ print $1 }’ /etc/passwd上例中,在调用awk 时,使用-F 选项来指定":" 作为字段分隔符。
awk 处理print $1 命令时,它会打印出在输入文件中每一行中出现的第一个字段。
以下是另一个示例:$ awk -F":" ’{ print $1 $3 }’ /etc/passwd以下是该脚本输出的摘录:halt7operator11root0shutdown6sync5bin1....etc.如您所见,awk 打印出/etc/passwd 文件的第一和第三个字段,它们正好分别是用户名和用户标识字段。
现在,当脚本运行时,它并不理想-- 在两个输出字段之间没有空格!如果习惯于使用bash 或python 进行编程,那么您会指望print $1 $3 命令在两个字段之间插入空格。
然而,当两个字符串在awk 程序中彼此相邻时,awk 会连接它们但不在它们之间添加空格。
以下命令会在这两个字段中插入空格:$ awk -F":" ’{ print $1 " " $3 }’ /etc/passwd以这种方式调用print 时,它将连接$1、" " 和$3,创建可读的输出。
当然,如果需要的话,我们还可以插入一些文本标签:$ awk -F":" ’{ print "username: " $1 "\t\tuid:" $3" }’ /etc/passwd这将产生以下输出:username: halt uid:7username: operator uid:11username: root uid:0username: shutdown uid:6username: sync uid:5username: bin uid:1....etc.外部脚本将脚本作为命令行自变量传递给awk 对于小的单行程序来说是非常简单的,而对于多行程序,它就比较复杂。
您肯定想要在外部文件中撰写脚本。
然后可以向awk 传递-f 选项,以向它提供此脚本文件:$ awk -f myscript.awk myfile.in将脚本放入文本文件还可以让您使用附加awk 功能。
例如,这个多行脚本与前面的单行脚本的作用相同,它们都打印出/etc/passwd 中每一行的第一个字段:BEGIN {FS=":"}{ print $1 }这两个方法的差别在于如何设置字段分隔符。
在这个脚本中,字段分隔符在代码自身中指定(通过设置FS 变量),而在前一个示例中,通过在命令行上向awk 传递-F":" 选项来设置FS。
通常,最好在脚本自身中设置字段分隔符,只是因为这表示您可以少输入一个命令行自变量。
我们将在本文的后面详细讨论FS 变量。
BEGIN 和END 块通常,对于每个输入行,awk 都会执行每个脚本代码块一次。
然而,在许多编程情况中,可能需要在awk 开始处理输入文件中的文本之前执行初始化代码。
对于这种情况,awk 允许您定义一个BEGIN 块。
我们在前一个示例中使用了BEGIN 块。
因为awk 在开始处理输入文件之前会执行BEGIN 块,因此它是初始化FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。
awk 还提供了另一个特殊块,叫作END 块。
awk 在处理了输入文件中的所有行之后执行这个块。
通常,END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息。
规则表达式和块awk 允许使用规则表达式,根据规则表达式是否匹配当前行来选择执行独立代码块。
以下示例脚本只输出包含字符序列foo 的那些行:/foo/ { print }当然,可以使用更复杂的规则表达式。
以下脚本将只打印包含浮点数的行:/[0-Array]+\.[0-Array]*/ { print }表达式和块还有许多其它方法可以选择执行代码块。
我们可以将任意一种布尔表达式放在一个代码块之前,以控制何时执行某特定块。
仅当对前面的布尔表达式求值为真时,awk 才执行代码块。
以下示例脚本输出将输出其第一个字段等于fred 的所有行中的第三个字段。
如果当前行的第一个字段不等于fred,awk 将继续处理文件而不对当前行执行print 语句:$1 == "fred" { print $3 }awk 提供了完整的比较运算符集合,包括"=="、""、"=" 和"!="。
另外,awk 还提供了"~" 和"!~" 运算符,它们分别表示“匹配”和“不匹配”。
它们的用法是在运算符左边指定变量,在右边指定规则表达式。
如果某一行的第五个字段包含字符序列root,那么以下示例将只打印这一行中的第三个字段:$5 ~ /root/ { print $3 }条件语句awk 还提供了非常好的类似于C 语言的if 语句。
如果您愿意,可以使用if 语句重写前一个脚本:{if ( $5 ~ /root/ ) {print $3}}这两个脚本的功能完全一样。
第一个示例中,布尔表达式放在代码块外面。
而在第二个示例中,将对每一个输入行执行代码块,而且我们使用if 语句来选择执行print 命令。
这两个方法都可以使用,可以选择最适合脚本其它部分的一种方法。
以下是更复杂的awk if 语句示例。
可以看到,尽管使用了复杂、嵌套的条件语句,if 语句看上去仍与相应的C 语言if 语句一样:{if ( $1 == "foo" ) {if ( $2 == "foo" ) {print "uno"} else {print "one"}} else if ($1 == "bar" ) {print "two"} else {print "three"}}使用if 语句还可以将代码:! /matchme/ { print $1 $3 $4 }转换成:{if ( $0 !~ /matchme/ ) {print $1 $3 $4}}这两个脚本都只输出不包含matchme 字符序列的那些行。
此外,还可以选择最适合您的代码的方法。
它们的功能完全相同。
awk 还允许使用布尔运算符"||"(逻辑与)和"&&"(逻辑或),以便创建更复杂的布尔表达式:( $1 == "foo" ) && ( $2 == "bar" ) { print }这个示例只打印第一个字段等于foo 且第二个字段等于bar 的那些行。
数值变量!至今,我们不是打印字符串、整行就是特定字段。
然而,awk 还允许我们执行整数和浮点运算。
通过使用数学表达式,可以很方便地编写计算文件中空白行数量的脚本。