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是一个变量,用于累加每个字段的值。
awk语法规则
awk语法规则
awk语法规则是一种文本处理工具,它可用于在文件中查找和替换数据。
以下是几个基本的awk语法规则:
1. awk命令的基本语法为:
```
awk [选项] '模式1 {动作1} 模式2 {动作2} ...' 文件名
```
其中,选项可以是:
-F:指定输入文件的字段分隔符
-v:定义变量
-f:指定包含awk脚本的文件名
2. awk的模式指定了对应的动作。
模式可以是以下几种:
- /正则表达式/:匹配正则表达式的行
- BEGIN:在处理输入之前执行的动作
- END:在处理输入之后执行的动作
- 行号:匹配行号的行
3. awk的动作指定了对应模式下要执行的命令。
动作可以是以下几种:
- print:输出指定的字段或整行
- printf:格式化输出
- getline:读入下一行数据
- if-else语句:条件语句
4. awk中的变量:
- $0:整行数据
- $1, $2, ...:第1、2、...个字段
- NR:当前记录的行号
- NF:当前记录的字段数
5. awk中的运算符:
- +、-、*、/:加、减、乘、除
- %:取模
- ==:等于
- !=:不等于
- >、>=、<、<=:大于、大于等于、小于、小于等于以上是awk语法规则的基本内容,掌握这些规则可以方便地进行文本处理。
awk ~用法
awk ~用法awk是一种强大的文本分析工具,它通过一系列的命令和选项来处理文本数据。
其中一个常用的命令是`awk`的`~`操作符,它用于匹配文本模式。
一、基本用法`awk`的`~`操作符用于在文本中查找匹配的模式。
它接受两个参数:一个是待匹配的文本,另一个是要匹配的模式。
如果模式匹配成功,则相应的行会被输出。
基本语法:`awk'pattern~pattern_to_match'file.txt`例如,假设我们有一个名为`data.txt`的文本文件,其中包含以下内容:```JohnDoeJaneSmithDoe,JohnSmith,Jane```如果我们想查找所有包含姓氏"Smith"的行,可以使用以下命令:```cssawk'last_name~/Smith/'data.txt```这将输出:```JaneSmithSmith,Jane```二、特殊字符处理在模式中,可以使用一些特殊字符和语法来匹配文本。
以下是一些常用的特殊字符和它们的含义:*`*`:匹配任意数量的字符(包括零个字符)。
*`?`:匹配单个字符(问号)。
*`[]`:匹配方括号内的任意字符。
可以使用通配符,如`[a-z]`匹配小写字母。
*`[^]`:匹配不在方括号内的任意字符。
*`\`:用于转义特殊字符。
例如,如果我们想查找所有包含姓氏"Doe"或名字以"J."开头的行,可以使用以下命令:```cssawk'last_name~/Doe|first_name~/J\./'data.txt```这将输出:```mathematicaJohnDoeDoe,John```三、匹配位置模式除了匹配简单的文本模式外,`awk`还可以匹配位置模式。
这意味着我们可以指定模式在文本中的位置,以匹配特定范围的字符。
基本语法:`awk'start~pattern[len]'file.txt`其中,`start`是起始位置,`pattern`是要匹配的模式,`len`是模式的长度。
awk 命令用法
以下是一些基本的AWK用法:1.打印指定列:bashawk 'print $1,$3' file.txt这会打印文件file.txt中的第一列和第三列。
2.根据模式打印行:bashawk '/pattern/ {print $0}' file.txt这会打印包含字符串pattern的所有行。
3.条件语句:bashawk '$1 > 50 {print$1}' file.txt这会打印文件file.txt中第一列值大于50的所有行的第一列。
4.使用分隔符分割数据:bashawk -F ',' 'print $1,$3' file.csv这会使用逗号","作为分隔符来处理file.csv中的数据。
5.计算行数、列数、和:bashawk 'END {print NR " rows"}' file.txtawk 'print NF " columns"' file.txtawk '{sum+=$1} END {print "Sum ", sum}' file.txt分别打印文件file.txt的行数、列数以及所有第一列数值的和。
6.使用变量和循环:bashawk '{for(i=1; i<NF; i++) sum[i] += $i} END {for(i=1; i<NF; i++) print sum[i]}' file.txt 这会计算每个列的和,并将结果存储在数组sum中。
7.修改或替换数据:bashawk 'gsub("pattern", "replacement") {print $0}' file.txt这会替换文件file.txt中所有pattern字符串为replacement。
Linux命令:awk
Linux命令:awk⼆.grep、sed、awk⽐较1.grep更适合单纯的查找或匹配⽂本2.sed更适合对匹配到的⽂本进⾏编辑3.命令awk更适合⽂本格式化,对⽂本进⾏较复杂的格式处理三.awk基本语法awk [options] 'pattern{action}' fileeg:vim test.txtABC 123 JackDEF 456 AliceGHI 789 Amy1.在没有options和pattern的情况下awk '{print}' test.txt//输出全⽂awk '{print $2}' test.txt//输出第⼆列awk '{print $2$1$3}' test.txt//调整第⼆列和第⼀列,并去掉中间的空格awk '{print $1,$2+1,$3}' test.txt//输出全⽂,第⼆列做+1计算2.pattern包括两种特殊模式,分别是BEGIN和END(1)BEGIN模式,是指命令在处理⽂本之前执⾏awk 'BEGIN{print "col1","col2","col3"}{print}' test.txtcol1 col2 col3ABC 123 JackDEF 456 AliceGHI 789 Amy(2)END模式,是指命令在处理⽂本之后执⾏awk '{print} END{print "end1","end2","end3"}' test.txtABC 123 JackDEF 456 AliceGHI 789 Amyend1 end2 end3(3)BEGIN和END同时存在时,其中,BEGIN和END之间的{}相当于⼀个循环体,对⽂件中的每⼀⾏进⾏处理awk 'BEGIN{print "col1","col2","col3"} {print} END{print "end1","end2","end3"}' test.txtcol1 col2 col3ABC 123 JackDEF 456 AliceGHI 789 Amyend1 end2 end33.常⽤的参数(1) -F,⽤于指定输⼊分隔符cp test.txt z.txtsed -i 's/查找字段/替换字段/g' filesed -i 's/ /:/g' z.txt//查找空格,⽤:替换cat z.txtABC:123:JackDEF:456:AliceGHI:789:Amyawk -F':' '{print $1,$2}' z.txt//以:分割awk -F' ' '{print $1,$2}' test.txt(2) -v,⽤于设置变量的值echo | awk -v v=100 '{print v}'echo | awk -v v1=1 -v v2=2 '{print v1,v2}'四.变量awk中变量分为内置变量和⾃定义变量两种1.内置变量FS 输⼊字段分隔符,默认为空⽩字符OFS 输出字段分隔符,默认为空⽩字符RS 输⼊记录分隔符(输⼊换⾏符),指定输⼊时的换⾏符ORS 输出记录分隔符(输出换⾏符),指定输出时的换⾏符NF 当前⾏的字段数(当前⾏被分隔符分割成了⼏段)NR 当前⾏的⾏号FNR 不同⽂件分别计数FILENAME 当前⽂件名ARGV 数组,保存的是命令⾏所给定的各参数ARGC ARGV数组的个数需要注意的是使⽤变量时,要使⽤-v选项指定对应的变量awk -v FS=':' -v OFS='#' '{print $1,$2}' z.txtABC#123DEF#456GHI#789awk -v FS=':' -v OFS='#' -v ORS='\n+++\n' '{print $1,$2}' z.txtABC#123+++DEF#456+++GHI#789+++awk -v RS='\n' '{print NR,$0}' test.txt//以\n为换⾏符,输出⾏号和每⾏内容1 ABC 123 Jack2 DEF 456 Alice3 GHI 789 AmyNF:当前⾏的字段数,其中$NF表⽰的是最后⼀个字段的内容,$(NF-1)表⽰的是倒数第⼆个字段的内容awk '{print NF,$0}' test.txt3 ABC 123 Jack3 DEF 456 Alice3 GHI 789 Amyawk '{print NF,$0,$1}' test.txt3 ABC 123 Jack ABC3 DEF 456 Alice DEF3 GHI 789 Amy GHIawk '{print NF,$NF,$0,$1}' test.txt3 Jack ABC 123 Jack ABC3 Alice DEF 456 Alice DEF3 Amy GHI 789 Amy GHINR:当前⾏号awk '{print NR,$0}' test.txt1 ABC 123 Jack2 DEF 456 Alice3 GHI 789 Amyawk '{print NR,$0,$NR}' test.txt1 ABC 123 Jack ABC2 DEF 456 Alice 4563 GHI 789 Amy Amywc -l test.txt //wc -l显⽰⾏数3 test.txtawk 'END{print NR}' test.txt3FNR:不同⽂件分别计数FILENAME:显⽰当前⽂件名awk '{print FNR,$0}' test.txt z.txt1 ABC 123 Jack2 DEF 456 Alice3 GHI 789 Amy1 ABC:123:Jack2 DEF:456:Alice3 GHI:789:Amyawk '{print FILENAME,FNR,$0}' test.txt z.txttest.txt 1 ABC 123 Jacktest.txt 2 DEF 456 Alicetest.txt 3 GHI 789 Amyz.txt 1 ABC:123:Jackz.txt 2 DEF:456:Alicez.txt 3 GHI:789:Amy2.⾃定义变量(1)使⽤-v来⾃定义变量(2)在awk中直接定义awk 'BEGIN{v=11;print v}'五.格式化中,awk使⽤printf时需要注意的问题1.使⽤printf输出的⽂本不会换⾏,使⽤'\n'转义换⾏2.使⽤printf输出时,指定的格式与被格式化的⽂本之间要⽤‘,’隔开3.使⽤printf输出时,格式中格式替换符必须与被格式化的⽂本⼀⼀对应awk '{printf "%.2f\n",$2}' test.txt123.00456.00789.00六.awk中的pattern模式当awk进⾏逐⾏处理时,会把pattern作为条件,判断当前⾏是否满⾜条件,若匹配则进⾏后⾯的处理,否则跳过该⾏。
awk命令用法
awk命令⽤法 awk:把⽂件逐⾏的读⼊,以空格为默认分隔符将每⾏切⽚,切开的部分再进⾏各种分析处理,是⼀个强⼤的⽂本分析⼯具,在对数据分析并⽣成报告时很有优势。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,⼀般指gawk,gawk 是 AWK 的 GNU 版本。
命令格式:awk [options] 'program' FILE ...其中:options:-F:指明输⼊时⽤到的字段分隔符,默认空⽩字符;-v:指定变量-v var=value:⾃定义变量program:PATTERN{ ACTION STATEMENTS;...} (语句之间⽤ ; 分隔)PATTERN--模式,这意味着并不是对⽂件中的每⼀⾏进⾏处理,⽽是处理那些能够被模式匹配到的⾏,不跟模式表⽰全⽂;ACTION--常见的处理机制是打印,命令有print和printf.变量常见内置变量 FS:切割时的分隔符,默认为空⽩字符; OFS:切割后输出时的分隔符,默认为空⽩字符; RS:输⼊时的换⾏符,默认为'\n'; ORS:输出时的换⾏符,默认为'\n'; NF:字段数量 ( $NF表⽰最后⼀个字段); NR:⾏数; FNR:分别计算各⽂件的⾏数; FILENAME:当前⽂件名; ARGC:命令⾏参数的个数; ARGV:数组,保存的是命令⾏所给定的各参数⽰例:awk -v FS=: '{print $1}' /etc/passwd (相当于awk -F: "{print $1}" /etc/passwd)awk -v FS=: -v OFS=, '{print $1,$2}' /etc/passwdawk -v RS=' ' '{print}' /etc/issueawk '{print NF}' /etc/fstab (可对⽐ awk '{print $NF}' /etc/fstab,$NF表⽰最后⼀个字段)awk 'BEGIN{print ARGC}' /etc/fstab /etc/issue (命令⾏参数有3个,分别为awk,/etc/fstab,/etc/issue)awk 'BEGIN{print ARGV[#]}' /etc/fstab /etc/issue (#表⽰索引下标)⾃定义变量两种⽅式可⾃定义变量:(1) -v var=value(2) 在program中直接定义⽰例: awk -v test="hello gawk" 'BEGIN{print test}' (相当于awk 'BEGIN{test="hello gawk";print test}')打印输出printprint item1,item2,...⽰例:tail -5 /etc/fstab | awk '{print $2,$4}' ($1..$#:内置变量,表⽰分隔后的字段)tail -5 /etc/fstab | awk '{print "hello:",$2,$4}' (注意,{}只能由单引号'' 引起来,不能⽤双引号"")要点:(1) 逗号,作为不同字段的分隔符;(2) item可以是字符串,数值,当前记录的字段、变量或awk的表达式;(3) 如省略item,相当于print $0(打印所有元素;$0表⽰所有字段)printf格式化输出:printf FORMAT,item1,item2,...释义:(1) FORMAT必须给出;(2) 不会⾃动换⾏,需要显式给出换⾏控制符,'\n';(3) FORMAT中需要分别为后⾯的每个item指定⼀个格式化符号;格式符:%c:显⽰字符的ASCII码;%d,%i:显⽰⼗进制整数;%e,%E:科学计数法数值显⽰;%f:显⽰为浮点数;%g,%G:以科学计数法或浮点形式显⽰数值;%s:显⽰字符串;%u:⽆符号整数;%%:显⽰%⾃⾝修饰符:#[.#]:第⼀个数字控制显⽰的宽度;第⼆个#表⽰⼩数点后的精度⽰例: %-3.1f,其中 '-' 表⽰左对齐;%+5.2d,其中 '+' 会显⽰数值的符号 awk -F: '{printf "Uername:%s, UID:%d\n",$1,$3}' /etc/passwd awk -F: '{printf "Uername:%-15s, UID:%d\n",$1,$3}' /etc/passwd操作符 算术操作符:x+y,x-y,x*y,x/y,x^y(多少次⽅),x%y 赋值操作符:=,+=,-=,*=,/=,%=,^=,++,-- ⽐较操作符:>,>=,<,<=,!=,== 模式匹配符:~:是否匹配;!~:是否不匹配 逻辑操作符:&&,||,! 函数调⽤:function_name(argu1,argu2,...) 条件表达式:selector ? if-true-expression : if-false-expression⽰例: awk -F: '{$3>=1000?usertype="Common User":usertype="Sysadmin or SysUser";printf "%15s : %-s\n",$1,usertype}' /etc/passwd awk '!/^UUID/{print $0}' /etc/fstab awk -F: '$3>1000{print $1,$3}' /etc/passwd awk -F: '$NF~/bash$/{print $1,$NF}' /etc/passwdPATTERN(1) /regular expression/:仅处理被模式匹配到的⾏;(2) relational expression:关系表达式,为"真"时处理 ("真":结果是⾮0值或⾮空字符串);(3) line ranges:⾏范围 (startline, endline 或 /pat1/, /pat2/);注意:此处⾏范围不⽀持直接给出数字的格式⽰例: awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd awk -F: '/^h/,/^s/{print $1}' /etc/passwd(4) BEGIN/END模式:BEGIN{}: 仅在开始处理⽂件中的⽂本之前执⾏⼀次;END{}:仅在⽂本处理完成之后执⾏⼀次⽰例: head /etc/passwd | awk -F: 'BEGIN{print "username uid"}{printf "%-12s%-5s\n",$1,$3}END{printf "%10s\n","END"}'控制语句if-else语法:if(condition) statement [else statement]使⽤场景:对awk取得的整⾏或某个字段做条件判断.⽰例:awk -F: '{if($3>=1000) {printf "Common user: %s\n",$1} else {printf "root or Sysuser: %s\n",$1}}' /etc/passwdawk -F: '{if($NF=="/bin/bash") print $1}' /etc/passwdawk '{if(NF>5) print $0}' /etc/fstabdf -h | awk -F% '/^\/dev/{print $1}' | awk '{if($NF>=20) print $1}'while and do while语法:while(condition) statement (条件"真"时进⼊循环;条件"假"时退出循环)do statement while(condition) (⾄少执⾏⼀次循环体)使⽤场景:对⼀⾏内的多个字段逐⼀处理时使⽤;对数组中的各元素逐⼀处理时使⽤.⽰例:awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}' /etc/grub2.cfgawk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>=7) {print $i,length($i)}; i++}}' /etc/grub2.cfgfor语法:for(expr1;expr2;expr3) statementfor(variable assignment;condition;iteration process) {for-body}⽰例:awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub2.cfg特殊⽤法:遍历数组中的元素语法:for(var in array) {for-body}switch语法:switch(expression) {case VALUE1 or /REGEXP/: statement; case VALUE2 or /REGEXP2/: statement; ...; default: statement} break and continuebreak:终⽌循环continue:中断本次循环继续下⼀轮next提前结束对本⾏的处理⽽直接进⼊下⼀⾏;⽰例:awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwdarray数组1) 关联数组:array[index-expression]index-expression:①可使⽤任意字符串;字符串要使⽤双引号;②如果某数组元素事先不存在,在引⽤时,awk会⾃动创建此元素,并将其值初始化为"空串"2) 若要判断数组中是否存在某元素,要使⽤"index in array"格式进⾏;3) 若要遍历数组中的每个元素,要使⽤for循环:for(var in array) {for-body}⽰例:awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";for(i in weekdays) {print weekdays[i]}}' netstat -tan | awk '/^tcp\>/{state[$NF]++}END{for(i in state){ print i,state[i]}}'awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_logawk '/^UUID/{fs[$3]++}END{for(i in fs){print i,fs[i]}}' /etc/fstabawk '{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count){print i,count[i]}}' /etc/fstabnetstat -tan | awk '/^tcp\>/{state[$NF]++}END{for(i in state){print i,state[i]}}'内置函数rand():返回0和1之间⼀个随机数;length([s]):返回指定字符串的长度;sub(r,s,[t]):以r表⽰的模式来查找t所表⽰的字符中的匹配的内容,并将其第⼀次出现替换为s所表⽰的内容; gsub(r,s,[t]):以r表⽰的模式来查找t所表⽰的字符中的匹配的内容,并将其所有出现均替换为s所表⽰的内容; split(s,a,[r]):以r为分隔符切割字符s,并将切割后的结果保存⾄a所表⽰的数组中⽰例:netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for(i in count){print i,count[i]}}'awk '/^[[:space:]]*kernel/{i=1;while(i<=NF){if(length($i)>=7)print $i,length($i);i++}}' /etc/grub.conf。
linux awk正则表达式
linux awk正则表达式awk 是一种文本处理工具,在处理文本的过程中,它可以使用正则表达式匹配文本,并对符合一定规则的文本进行处理和操作,让文本处理变得更加高效和便捷。
在 awk 中,正则表达式是非常重要的一部分,使用 awk 正则表达式可以实现更加灵活的文本处理操作,可以更加方便地进行文本匹配和替换等操作。
本文将介绍awk 正则表达式的写法、规则和常用语法。
1. 正则表达式的基本格式正则表达式是由特殊字符和文本字符组成的一种模式匹配规则,它可以匹配文本中的某些特定字符和模式。
在 awk 中,正则表达式的基本格式为:```awk/正则表达式/```其中,正则表达式是由特定的字符组成的一种模式,它可以匹配文本中的一些特定字符和模式。
在使用 awk 进行文本处理时,可以通过正则表达式来匹配需要处理的文本,并对其进行相应的操作。
2. awk 正则表达式的常用语法awk 正则表达式可以使用一些常用的语法规则,来实现文本匹配和处理。
以下是 awk 正则表达式的一些常用语法:(1)使用 . 匹配任意字符使用 . 可以匹配任何一个字符。
比如,/a.c/ 表示以 a 开头,以c 结尾,中间可以是任意一个字符。
(2)使用 ^ 匹配行首使用 ^ 可以匹配一行文本的行首。
比如,/^a/ 表示以 a 开头的一行文本。
(3)使用 $ 匹配行尾使用 $ 可以匹配一行文本的行尾。
比如,/a$/ 表示以 a 结尾的一行文本。
(4)使用 [ ] 匹配字符集使用 [ ] 可以匹配一组字符中任意一个字符。
比如,/[abc]/ 表示匹配 a、b、c 中的任意一个字符。
(5)使用 [^ ] 匹配除了字符集之外的字符使用 [^ ] 可以匹配除了字符集中的字符之外的任意其他字符。
比如,/[^abc]/ 表示匹配除了 a、b、c 以外的其他字符。
(6)使用 * 匹配前面的字符出现 0 次或多次使用 * 可以匹配前面的字符出现 0 次或多次。
面试常见问题之AWK
面试常见问题之AWK1.AWK是什么?答案:AWK是一种用于文本处理的编程语言,它以行为单位读取文本文件,并根据指定的模式和动作执行相应的操作。
2.AWK的基本语法是什么?答案:AWK的基本语法如下:awk 'pattern { action }' file其中,pattern是用于匹配行的模式或条件,action是在满足pattern时要执行的动作,file是要处理的文件。
3. AWK中如何打印文本行的内容?答案:在AWK中,可以使用print语句打印文本行的内容。
例如,使用print $0可以打印当前行的全部内容。
4. AWK中的变量如何声明和使用?答案:在AWK中,可以使用var=value的形式声明变量并赋值。
变量可以在pattern或action中使用。
例如,使用$1和$2来引用第一个和第二个字段。
5. AWK中的内置变量有哪些?答案:AWK中有一些内置变量,例如,NR表示当前行的行号,NF表示当前行的字段数,$0表示当前行的全部内容,$1到$NF表示当前行的各个字段。
6. AWK中的条件语句有哪些?答案:AWK中的条件语句包括if语句和while语句。
if语句用于根据条件执行不同的动作,while语句用于循环执行某个动作,直到条件不满足为止。
7. AWK中的循环语句有哪些?答案:AWK中的循环语句包括for循环和while循环。
for循环用于在指定的范围内循环执行某个动作,while循环用于在满足条件时循环执行某个动作。
8. AWK中的正则表达式如何使用?答案:在AWK中,可以使用正则表达式进行模式匹配。
例如,使用awk '/pattern/ {action}' file可以匹配包含pattern的行并执行action。
9. AWK中的内置函数有哪些?答案:AWK中有一些内置函数,例如,SUBSTR用于提取字符串的子串,LENGTH用于计算字符串的长度,SUM用于计算数字列表的总和等。
awk语法
awk语法
AWK是一种专门用于文本处理的脚本语言,提供了处理文本文件的强大工具。
下面是AWK的一些基本语法:
1.基本形式。
awk 'pattern {action}' file。
其中pattern是模式,action是动作,file是要处理的文件。
2.模式。
模式用来匹配文本中的行,可以使用正则表达式和关系表达式。
如果模式为空,则所有的行都匹配。
3.动作。
动作表示在匹配到模式的行执行的操作。
可以是单个命令,也可以是一组命令。
如果动作为空,则默认打印该行。
4.自定义变量。
可以使用自定义变量来存储计数器、标志位等信息。
5.功能函数。
AWK内置了众多的功能函数,例如substr、length、match、tolower 等,可以使用这些函数对文本进行处理。
6.输出格式。
可以使用printf命令来控制输出格式,可以设置字段宽度、精度、左右对齐方式等。
以上就是AWK的基本语法,它可以将处理文本文件变得更加简洁高效。
- 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 还允许我们执行整数和浮点运算。
通过使用数学表达式,可以很方便地编写计算文件中空白行数量的脚本。