linux awk命令详解

合集下载

linux命令awk用法

linux命令awk用法

linux命令awk用法awk是一种文本处理工具,用于从文件或标准输入中提取和处理数据。

它基于模式匹配和动作执行的原则。

一、awk命令的基本用法:1.输出整行:awk'{print}' file.txt2.输出指定列:awk'{print $1, $3}' file.txt3.按特定分隔符输出列:awk -F':''{print $1, $3}' file.txt4.使用条件筛选:awk'$3 > 10 {print}' file.txt5.使用条件筛选并输出指定列:awk'$3 > 10 {print $1, $3}' file.txt6.使用自定义的动作进行处理:awk'{sum += $3} END {print "总和:" sum}' file.txt7.使用if-else条件:awk '{if ($3 > 10) print"大于10"; else print"小于等于10"}'file.txt8.使用内置变量:awk'{print NR, NF, $0}' file.txtNR:当前记录号(行号);NF:当前记录的字段数;$0:整行内容二、awk命令的高级用法:awk 的高级用法包括更复杂的模式匹配、自定义函数、数组和循环等。

以下是一些常见的高级用法模式:1.使用模式匹配:awk'/pattern/ {print}' file.txt输出文件中包含特定模式的所有行。

2.自定义函数:awk'function myfunc(arg) {return arg * 2} {print myfunc($3)}'file.txt定义一个函数myfunc,并在每行的第三个字段上应用该函数进行处理。

linuxawk命令详解

linuxawk命令详解

linuxawk命令详解linux awk命令详解awk是⾏处理器: 相⽐较屏幕处理的优点,在处理庞⼤⽂件时不会出现内存溢出或是处理缓慢的问题,通常⽤来格式化⽂本信息awk处理过程: 依次对每⼀⾏进⾏处理,然后输出1、awk命令形式awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file[-F|-f|-v] - ⼤参数,-F指定分隔符,-f调⽤脚本,-v定义变量 var=value' ' - 引⽤代码块BEGIN - 初始化代码块,在对每⼀⾏进⾏处理之前,初始化代码,主要是引⽤全局变量,设置FS分隔符// - 匹配代码块,可以是字符串或正则表达式{} - 命令代码块,包含⼀条或多条命令; - 多条命令使⽤分号分隔END - 结尾代码块,在对每⼀⾏进⾏处理之后再执⾏的代码块,主要是进⾏最终计算或输出结尾摘要信息2、特殊要点 -Command$0 表⽰整个当前⾏$1 每⾏第⼀个字段NF 字段数量变量NR 每⾏的记录号,多⽂件记录递增FNR 与NR类似,不过多⽂件记录不递增,每个⽂件都从1开始\t 制表符\n 换⾏符FS BEGIN时定义分隔符RS 输⼊的记录分隔符,默认为换⾏符(即⽂本是按⼀⾏⼀⾏输⼊)~ 匹配,与==相⽐不是精确⽐较!~ 不匹配,不精确⽐较== 等于,必须全部相等,精确⽐较!= 不等于,精确⽐较&& 逻辑与|| 逻辑或+ 匹配时表⽰1个或1个以上/[0-9][0-9]+/ 两个或两个以上数字/[0-9][0-9]*/ ⼀个或⼀个以上数字FILENAME ⽂件名OFS 输出字段分隔符,默认也是空格,可以改为制表符等ORS 输出的记录分隔符,默认为换⾏符,即处理结果也是⼀⾏⼀⾏输出到屏幕-F'[:#/]' 定义三个分隔符t实例 1-F 指定分隔符,如下表⽰以':'分割$0 表⽰整⾏ $1 指指定分隔符后,第⼀个字段,$3第三个字段,⼀次类推⼀个或多个连续的空格或制表符看做⼀个定界符,即多个空格看做⼀个空格print 是awk打印指定内容的主要命令awk '{print}' /etc/passwd == awk '{print $0}' /etc/passwd //逐⾏打印所有⾏awk '{print " "}' /etc/passwd //不输出passwd的内容,⽽是输出相同个数的空⾏,进⼀步解释了awk是⼀⾏⼀⾏处理⽂本awk -F: '{print $1; print $2}' /etc/passwd //将每⼀⾏的前⼆个字段,分⾏输出,不同命令⽤';'隔开awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd //输出字段1,3,6,以制表符作为分隔符awk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,不分隔awk -F":" '{print $1,$3}' /etc/passwd //多了⼀个逗号,$1与$3使⽤空格分隔awk -F":" '{print $1 " " $3}' /etc/passwd //$1与$3之间⼿动添加空格分隔awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //⾃定义输出awk -F: '{print NF}' /etc/passwd //显⽰每⾏有多少字段awk -F: '{print $NF}' /etc/passwd //将每⾏第NF个字段的值打印出来awk -F: 'NF==4 {print }' /etc/passwd //显⽰只有4个字段的⾏awk -F: 'NF>2{print $0}' /etc/passwd //显⽰每⾏字段数量⼤于2的⾏awk '{print NR,$0}' /etc/passwd //输出每⾏的⾏号awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印⾏号,字段数,最后字段值,制表符,每⾏内容awk -F: 'NR==5{print}' /etc/passwd //显⽰第5⾏awk -F: 'NR==5 || NR==6{print}' /etc/passwd //显⽰第5⾏和第6⾏实例 21.匹配代码块 --//纯字符匹配 !//纯字符不匹配 ~//字段值匹配 !~//字段值不匹配 ~/a1|a2/字段值匹配a1或a2awk '/mysql/' /etc/passwd == awk '/mysql/{print $0}' /etc/passwdawk '!/mysql/{print $0}' /etc/passwd //输出不匹配mysql的⾏awk '/mysql|mail/{print}' /etc/passwdawk -F: '/mail/,/mysql/{print}' /etc/passwd //区间匹配awk -F: '$1 ~/mail/{print $1}' /etc/passwd //$1匹配指定内容才显⽰2.IF语句&For语句 --必须⽤在{}中,且⽐较内容⽤()扩起来awk -F: '{if($1 ~/mysql/) print $1}' /etc/passwd //简写awk -F: '{if($1 ~/mysql/) {print $1}}' /etc/passwd //全写awk -F: '{if($1 ~/mysql/) {print $1} else {print $2}}' /etc/passwd // if...else... firewall-cmd --get-service | awk -F" " '{for(i=0;i<NF;i++)print $i}'。

linux命令 awk参数

linux命令 awk参数

linux命令 awk参数awk命令是在Linux和Unix操作系统中用于处理和分析文本数据的强大工具。

它通常用于从文件或者标准输入流中抽取和处理数据。

awk命令的参数有很多,我将从多个角度来介绍一些常用的参数。

1. -F参数,指定输入字段分隔符。

例如,使用awk -F:'{print $1}' file.txt可以将文件file.txt中以冒号分隔的第一个字段打印出来。

2. -v参数,用于在awk脚本中创建变量并赋值。

例如,awk -v var=10 '{print $1+var}' file.txt会将file.txt中每行的第一个字段与变量var相加并打印出来。

3. -f参数,从文件中读取awk脚本。

这样可以将复杂的awk脚本保存在文件中,然后通过awk -f script.awk file.txt来执行。

4. BEGIN和END参数,这两个参数用于在处理输入之前和之后执行一次动作。

比如,可以使用awk 'BEGIN{print "Start"}{print $1} END{print "End"}' file.txt来在处理file.txt之前打印"Start",处理完毕后打印"End"。

5. 条件表达式,可以使用条件表达式来过滤输入数据。

例如,awk '$1 > 10 {print $0}' file.txt会打印出file.txt中第一个字段大于10的行。

6. 内置变量,awk内置了许多有用的变量,如NR(当前记录号)、NF(当前行的字段数)、FS(字段分隔符)等,可以在awk脚本中使用这些变量来处理数据。

7. 函数,awk支持许多内置函数,如tolower()、toupper()、length()等,可以在awk脚本中使用这些函数来对数据进行处理。

Linuxawk命令详解

Linuxawk命令详解

选项含义-F fs 指定以 fs 作为输⼊⾏的分隔符,awk 命令默认分隔符为空格或制表符-f file从脚本⽂件中读取 awk 脚本指令,以取代直接在命令⾏中输⼊指令-v var=val 在执⾏处理过程之前,设置⼀个变量 var ,并设置初始值为 val Linuxawk 命令详解⼀、awk 命令介绍 除了使⽤ sed 命令,Linux 系统中还有⼀个功能更加强⼤的⽂本数据处理⼯具,就是 awk 。

它诞⽣于 20 世纪 70 年代末期,这也许是它影响了众多 Linux ⽤户的原因之⼀。

曾有⼈推测 awk 命令的名字来源于 awkward 这个单词。

其实不然,此命令的设计者有 3 位,他们的姓分别是 Aho 、Weingberger 和 Kernighan ,awk 就取⾃这 3 为⼤师姓的⾸字母。

awk 的最基本功能是在⽂件或字符串中基于指定规则浏览和抽取信息,awk 抽取信息后,才能进⾏其他⽂本操作,完整的awk 脚本通常⽤来格式化⽂本⽂件中的信息。

awk 和 sed 命令类似,awk 命令也是逐⾏扫描⽂件(从第 1 ⾏到最后⼀⾏),寻找含有⽬标⽂本的⾏,如果匹配成功,则会在该⾏上执⾏⽤户想要的操作;反之,则不对⾏做任何处理。

awk 命令的基本格式为:[root@localhost ~]# awk [选项] '脚本命令' ⽂件名 此命令常⽤的选项以及各⾃的含义,如下表所⽰: awk 的强⼤之处在于脚本命令,它由 2 部分组成,分别为匹配规则和执⾏命令,如下所⽰:'匹配规则{执⾏命令}' 这⾥的匹配规则,和 sed 命令中的 address 部分作⽤相同,⽤来指定脚本命令可以作⽤到⽂本内容中的具体⾏,可以使⽤字符串(⽐如 /demo/,表⽰查看含有 demo 字符串的⾏)或者正则表达式指定。

另外需要注意的是,整个脚本命令是⽤单引号('')括起,⽽其中的执⾏命令部分需要⽤⼤括号({})括起来。

Linux awk命令详解

Linux awk命令详解
\ ^ $ . [] | () * // 通用的regexp元字符
+ : 匹配其前的单个字符一次以上,是awk自有的元字符,不适用于grep或sed等
? : 匹配其前的单个字符1次或0次,是awk自有的元字符,不适用于grep或sed等
② 举例:
awk '/ *\$0\.[0-9][0-9].*/' input_file
举例: awk '($1 < 10 ) && ($2 > 10) {print "ok"}' input_file
awk '/^d/ || /x$/ {print "ok"}' input_file
④ 其它表达式用作awk_script,如赋值表达式等
eg: awk '(tot+=$6); END{print "total points :" tot }' input_file // 分号不能省略
2) 布尔表达式用作awk_pattern,表达式成立时,触发相应的actions执行。
① 表达式中可以使用变量(如字段变量$1,$2等)和/regexp/
② 布尔表达式中的操作符:
关系操作符: < > <= >= == !=
匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,则返回真
awk -F '[][]' '{print $1}' file 按照正则表达式的值做为分隔符,这里代表[、]
5、awk -f awkfile file 通过文件awkfile的内容依次进行控制。

Linuxawk命令详解

Linuxawk命令详解

Linuxawk命令详解awk是⼀个强⼤的⽂本分析⼯具,相对于grep的查找,sed的编辑,awk在其对数据分析并⽣成报告时,显得尤为强⼤。

简单来说awk就是把⽂件逐⾏的读⼊,以空格为默认分隔符将每⾏切⽚,切开的部分再进⾏各种分析处理。

使⽤⽅法: awk '{pattern + action}' {filenames}尽管操作可能会很复杂,但语法总是这样,其中 pattern 表⽰ AWK 在数据中查找的内容,⽽ action 是在找到匹配内容时所执⾏的⼀系列命令。

花括号({})不需要在程序中始终出现,但它们⽤于根据特定的模式对⼀系列指令进⾏分组。

pattern就是要表⽰的正则表达式,⽤斜杠括起来。

awk语⾔的最基本功能是在⽂件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进⾏其他⽂本操作。

完整的awk脚本通常⽤来格式化⽂本⽂件中的信息。

通常,awk是以⽂件的⼀⾏为处理单位的。

awk每接收⽂件的⼀⾏,然后执⾏相应的命令,来处理⽂本。

awk内置变量ARGC 命令⾏参数个数ARGV 命令⾏参数排列ENVIRON ⽀持队列中系统环境变量的使⽤FILENAME awk浏览的⽂件名FNR 浏览⽂件的记录数FS 设置输⼊域分隔符,等价于命令⾏ -F选项NF 浏览记录的域的个数NR 已读的记录数OFS 输出域分隔符ORS 输出记录分隔符RS 控制记录分隔符$0变量是指整条记录。

$1表⽰当前⾏的第⼀个域,$2表⽰当前⾏的第⼆个域,......以此类推。

$NF是number finally,表⽰最后⼀列的信息,跟变量NF是有区别的,变量NF统计的是每⾏列的总数常⽤的命令展⽰awk擅长列输出搜索/etc/passwd有root关键字的所有⾏awk '/root/' /etc/passwd 【这种是pattern的使⽤,匹配了pattern(这⾥是root)的⾏才会执⾏action(没有指定action,默认输出每⾏的内容)】搜索/etc/passwd有root关键字的所有⾏,并显⽰对应的shellawk -F: '/root/ {print $7}' /etc/passwd统计/etc/passwd:⽂件名,每⾏的⾏号,每⾏的列数,对应的完整⾏内容:awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd使⽤printf替代print,可以让代码更加简洁,易读awk -F: '{printf ("filename:%10s, linenumber:%3s,column:%3s,content:%3f\n",FILENAME,NR,NF,$0)}' /etc/passwd打印/etc/passwd/的第⼆⾏信息awk -F: 'NR==2{print "filename: "FILENAME, $0}' /etc/passwdawk的过滤使⽤⽅法ls -lF | awk '/^d/'指定特定的分隔符,查询第⼀列awk -F ":" '{print $1}' /etc/passwd指定特定的分隔符,查询最后⼀列awk -F ":" '{print $NF}' /etc/passwd指定特定的分隔符,查询倒数第⼆列awk -F ":" '{print $NF-1}' /etc/passwd获取第12到31⾏的第⼀列的信息awk -F ":" '{if(NR<31 && NR >12) print $1}' /etc/passwd多分隔符的使⽤:[root@localhost ftl]# awk -F "[/]" 'NR == 4 {print $0,"\n",$1}' /etc/passwd这⾥以/为分隔符,多个分隔符利⽤[]然后在⾥⾯写分隔符即可添加了BEGIN和END[root@localhost ftl]# cat /etc/passwd | awk -F: 'BEGIN{print "name, shell"} {print $1,$NF} END{print "hello world"}'查看最近登录最多的IP信息[root@localhost ftl]# last | awk '{S[$3]++} END{for(a in S ) {print S[a],a}}' |uniq| sort -rh利⽤正则过滤多个空格[root@localhost ~]# ifconfig |grep eth* | awk -F '[ ]+' '{print $1}'awk编程--变量和赋值除了awk的内置变量,awk还可以⾃定义变量, awk中的循环语句同样借鉴于C语⾔,⽀持while、do/while、for、break、continue,这些关键字的语义和C语⾔中的语义完全相同。

Linux命令高级技巧使用awk进行数据格式化和输出

Linux命令高级技巧使用awk进行数据格式化和输出

Linux命令高级技巧使用awk进行数据格式化和输出Linux命令高级技巧:使用awk进行数据格式化和输出在Linux系统中,awk是一种强大的文本处理工具,可用于数据提取、格式化、转换和输出。

本文将介绍使用awk进行数据格式化和输出的高级技巧。

一、awk的基本语法awk命令的基本语法如下:```bashawk 'pattern {action}' file```其中,pattern表示匹配条件,action表示要执行的操作,file表示要处理的文件。

当pattern匹配到文件的某一行时,就执行action中定义的操作。

二、数据格式化与输出1. 格式化输出字段awk可以对文件的字段进行格式化输出。

通过在action中使用printf 函数,可以指定输出的格式。

例如,下面的例子将以两位小数的形式输出文件的第二个字段:awk '{printf "%.2f\n", $2}' file```2. 自定义字段分隔符默认情况下,awk将空格作为字段的分隔符。

但是,你也可以通过设置变量FS来定义自己的字段分隔符。

例如,将逗号作为字段分隔符:```bashawk -F ',' '{print $1,$2}' file```3. 按照条件进行输出awk可以根据条件进行数据输出。

你可以使用if语句,通过判断条件决定是否输出符合条件的数据。

例如,下面的例子将输出第一个字段为"Apple"的行:```bashawk '$1=="Apple" {print $0}' file```4. 对数据进行统计和计算awk可以对文件中的数据进行统计和计算操作。

你可以定义变量,在action中通过对数据累加或者计算结果来实现统计。

例如,下面的例子统计文件中第二个字段的总和:awk '{sum+=$2} END{print sum}' file```5. 使用正则表达式匹配字段awk可以使用正则表达式来匹配字段,从而实现更为灵活的数据处理和输出。

Linux命令高级技巧使用awk命令进行统计和计算

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux awk命令详解awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息awk处理过程:依次对每一行进行处理,然后输出awk命令形式:awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file[-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量var=value' ' 引用代码块BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符// 匹配代码块,可以是字符串或正则表达式{} 命令代码块,包含一条或多条命令;多条命令使用分号分隔END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息特殊要点:$0 表示整个当前行$1 每行第一个字段NF 字段数量变量NR 每行的记录号,多文件记录递增FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始\t 制表符\n 换行符FS BEGIN时定义分隔符RS 输入的记录分隔符,默认为换行符(即文本是按一行一行输入)~ 匹配,与==相比不是精确比较!~ 不匹配,不精确比较== 等于,必须全部相等,精确比较!= 不等于,精确比较&&逻辑与|| 逻辑或+ 匹配时表示1个或1个以上/[0-9][0-9]+/ 两个或两个以上数字/[0-9][0-9]*/ 一个或一个以上数字FILENAME 文件名OFS 输出字段分隔符,默认也是空格,可以改为制表符等ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕-F'[:#/]' 定义三个分隔符print & $0print 是awk打印指定内容的主要命令awk '{print}' /etc/passwd == awk '{print $0}' /etc/passwdawk '{print " "}' /etc/passwd //不输出passwd的内容,而是输出相同个数的空行,进一步解释了awk是一行一行处理文本awk '{print "a"}' /etc/passwd //输出相同个数的a行,一行只有一个a字母awk -F":" '{print $1}' /etc/passwdawk -F: '{print $1; print $2}' /etc/passwd //将每一行的前二个字段,分行输出,进一步理解一行一行处理文本awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd //输出字段1,3,6,以制表符作为分隔符-f指定脚本文件awk -f script.awk fileBEGIN{FS=":"}{print $1} //效果与awk -F":" '{print $1}'相同,只是分隔符使用FS在代码自身中指定awk 'BEGIN{X=0} /^$/{ X+=1 } END{print "I find",X,"blank lines."}' testI find 4 blank lines.ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total sizeis",sum}' //计算文件大小total size is 17487-F指定分隔符$1 指指定分隔符后,第一个字段,$3第三个字段,\t是制表符一个或多个连续的空格或制表符看做一个定界符,即多个空格看做一个空格awk -F":" '{print $1}' /etc/passwdawk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,不分隔awk -F":" '{print $1,$3}' /etc/passwd //多了一个逗号,$1与$3使用空格分隔awk -F":" '{print $1 " " $3}' /etc/passwd //$1与$3之间手动添加空格分隔awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //自定义输出awk -F: '{print NF}' /etc/passwd //显示每行有多少字段awk -F: '{print $NF}' /etc/passwd //将每行第NF个字段的值打印出来awk -F: 'NF==4 {print }' /etc/passwd //显示只有4个字段的行awk -F: 'NF>2{print $0}' /etc/passwd //显示每行字段数量大于2的行awk '{print NR,$0}' /etc/passwd //输出每行的行号awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容awk -F: 'NR==5{print}' /etc/passwd //显示第5行awk -F: 'NR==5 || NR==6{print}' /etc/passwd //显示第5行和第6行route -n|awk 'NR!=1{print}' //不显示第一行//匹配代码块//纯字符匹配!//纯字符不匹配 ~//字段值匹配 !~//字段值不匹配~/a1|a2/字段值匹配a1或a2awk '/mysql/' /etc/passwdawk '/mysql/{print }' /etc/passwdawk '/mysql/{print $0}' /etc/passwd //三条指令结果一样awk '!/mysql/{print $0}' /etc/passwd //输出不匹配mysql的行awk '/mysql|mail/{print}' /etc/passwdawk '!/mysql|mail/{print}' /etc/passwdawk -F: '/mail/,/mysql/{print}' /etc/passwd //区间匹配awk '/[2][7][7]*/{print $0}' /etc/passwd //匹配包含27为数字开头的行,如27,277,2777...awk -F: '$1~/mail/{print $1}' /etc/passwd //$1匹配指定内容才显示awk -F: '{if($1~/mail/) print $1}' /etc/passwd //与上面相同awk -F: '$1!~/mail/{print $1}' /etc/passwd //不匹配awk -F: '$1!~/mail|mysql/{print $1}' /etc/passwdIF语句必须用在{}中,且比较内容用()扩起来awk -F: '{if($1~/mail/) print $1}'/etc/passwd //简写awk -F: '{if($1~/mail/) {print$1}}' /etc/passwd //全写awk -F: '{if($1~/mail/) {print $1} else {print $2}}'/etc/passwd //if...else...条件表达式== != > >=awk -F":" '$1=="mysql"{print $3}' /etc/passwdawk -F":" '{if($1=="mysql") print $3}' /etc/passwd //与上面相同awk -F":" '$1!="mysql"{print $3}' /etc/passwd //不等于awk -F":" '$3>1000{print $3}' /etc/passwd //大于awk -F":" '$3>=100{print $3}' /etc/passwd //大于等于awk -F":" '$3<1{print $3}' /etc/passwd //小于awk -F":" '$3<=1{print $3}' /etc/passwd //小于等于逻辑运算符&&||awk -F: '$1~/mail/ && $3>8 {print }' /etc/passwd //逻辑与,$1匹配mail,并且$3>8awk -F: '{if($1~/mail/ && $3>8) print }' /etc/passwdawk -F: '$1~/mail/ || $3>1000 {print }' /etc/passwd //逻辑或awk -F: '{if($1~/mail/ || $3>1000) print }' /etc/passwd数值运算awk -F: '$3 > 100' /etc/passwdawk -F: '$3 > 100 || $3 < 5' /etc/passwdawk -F: '$3+$4 > 200' /etc/passwdawk -F: '/mysql|mail/{print $3+10}' /etc/passwd //第三个字段加10打印awk -F: '/mysql/{print $3-$4}' /etc/passwd //减法awk -F: '/mysql/{print $3*$4}' /etc/passwd //求乘积awk '/MemFree/{print $2/1024}' /proc/meminfo //除法awk '/MemFree/{print int($2/1024)}' /proc/meminfo //取整输出分隔符OFSawk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txtawk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt//输出字段6匹配WAIT的行,其中输出每行行号,字段4,5,6,并使用制表符分割字段输出处理结果到文件①在命令代码块中直接输出 route -n|awk 'NR!=1{print > "./fs"}'②使用重定向进行输出 route -n|awk 'NR!=1{print}' > ./fs格式化输出netstat -anp|awk '{printf "%-8s %-8s %-10s\n",$1,$2,$3}'printf表示格式输出%格式化输出分隔符-8长度为8个字符s表示字符串类型打印每行前三个字段,指定第一个字段输出字符串类型(长度为8),第二个字段输出字符串类型(长度为8),第三个字段输出字符串类型(长度为10)netstat -anp|awk '$6=="LISTEN" || NR==1 {printf "%-10s %-10s %-10s\n",$1,$2,$3}'netstat -anp|awk '$6=="LISTEN" || NR==1 {printf "%-3s %-10s %-10s %-10s \n",NR,$1,$2,$3}'IF语句awk -F: '{if($3>100) print "large"; else print "small"}' /etc/passwdsmallsmallsmalllargesmallsmallawk -F: 'BEGIN{A=0;B=0} {if($3>100) {A++; print "large"} else {B++; print "small"}} END{print A,"\t",B}' /etc/passwd//ID大于100,A加1,否则B加1awk -F: '{if($3<100) next; else print}' /etc/passwd //小于100跳过,否则显示awk -F: 'BEGIN{i=1} {if(i<NF) print NR,NF,i++ }' /etc/passwdawk -F: 'BEGIN{i=1} {if(i<NF) {print NR,NF} i++ }' /etc/passwd另一种形式awk -F: '{print ($3>100 ? "yes":"no")}' /etc/passwdawk -F: '{print ($3>100 ? $3":\tyes":$3":\tno")}' /etc/passwdwhile语句awk -F: 'BEGIN{i=1} {while(i<NF) print NF,$i,i++}' /etc/passwd7 root 17 x 27 0 37 0 47 root 57 /root 6数组netstat -anp|awk 'NR!=1{a[$6]++} END{for (i in a) print i,"\t",a[i]}'netstat -anp|awk 'NR!=1{a[$6]++} END{for (i in a) printf "%-20s %-10s %-5s \n", i,"\t",a[i]}'9523 19929 1LISTEN 67903 13038/cupsd 17913 110837 19833 1应用1awk -F: '{print NF}'helloworld.sh //输出文件每行有多少字段awk -F: '{print $1,$2,$3,$4,$5}' helloworld.sh //输出前5个字段awk -F: '{print $1,$2,$3,$4,$5}' OFS='\t' helloworld.sh //输出前5个字段并使用制表符分隔输出awk -F: '{print NR,$1,$2,$3,$4,$5}' OFS='\t' helloworld.sh //制表符分隔输出前5个字段,并打印行号应用2awk -F'[:#]' '{printNF}' helloworld.sh //指定多个分隔符: #,输出每行多少字段awk -F'[:#]' '{print $1,$2,$3,$4,$5,$6,$7}' OFS='\t' helloworld.sh //制表符分隔输出多字段应用3awk -F'[:#/]' '{print NF}'helloworld.sh //指定三个分隔符,并输出每行字段数awk -F'[:#/]' '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12}' helloworld.sh //制表符分隔输出多字段应用4计算/home目录下,普通文件的大小,使用KB作为单位ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total sizeis:",sum/1024,"KB"}'ls -l|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total sizeis:",int(sum/1024),"KB"}' //int是取整的意思应用5统计netstat -anp 状态为LISTEN和CONNECT的连接数量分别是多少netstat -anp|awk '$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf "%-10s %-6s %-3s \n", i," ",sum[i]}'应用6统计/home目录下不同用户的普通文件的总数是多少?ls -l|awk 'NR!=1 && !/^d/{sum[$3]++} END{for (i in sum) printf"%-6s %-5s %-3s \n",i," ",sum[i]}'mysql 199root 374统计/home目录下不同用户的普通文件的大小总size是多少?ls -l|awk 'NR!=1 && !/^d/{sum[$3]+=$5} END{for (i in sum) printf "%-6s %-5s %-3s %-2s \n",i," ",sum[i]/1024/1024,"MB"}'应用7输出成绩表awk 'BEGIN{math=0;eng=0;com=0;printf"Lineno. Name No. Math English Computer Total\n";printf "------------------------------------------------------------\n"}{math+=$3; eng+=$4; com+=$5;printf "%-8s %-7s %-7s %-7s %-9s %-10s %-7s \n",NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf"------------------------------------------------------------\n";printf"%-24s %-7s %-9s %-20s \n","Total:",math,eng,com;printf"%-24s %-7s %-9s %-20s \n","Avg:",math/NR,eng/NR,com/NR}' test0[root@localhost home]# cat test0Marry 2143 78 84 77Jack 2321 66 78 45Tom 2122 48 77 71Mike 2537 87 97 95Bob 2415 40 57 62。

相关文档
最新文档