Linux awk命令使用详解
- 格式:docx
- 大小:29.78 KB
- 文档页数:27
linux的awk命令用法AWK 是一个强大的文本处理工具,它处理文本文件的方法是基于行的,可以读取文件、处理文件并输出文件结果。
AWK 的名称来自于其开发者 Alfred Aho、Peter Weinberger和 Brian Kernighan 姓氏的首字母。
在Linux中,我们可以通过终端输入命令来使用 AWK 工具。
本文将介绍 AWK 命令的使用。
一、基本语法AWK 工具的基本语法为:awk '{pattern + action}' file_name其中,pattern 表示要匹配的文本模式,action 表示执行的操作,file_name 表示需要处理的文件名。
举个例子,我们可以使用下面的命令来查看一个文件的内容:其中,print 表示将文件内容输出。
在这里,pattern 为空,因此 awk 将匹配所有内容,而 action 是 print,表示将所有匹配到的内容都输出。
这个命令将显示文件file.txt 中的所有内容。
AWK 工具也可以通过管道命令将其结果传递给其他命令。
例如,我们可以将上述命令的输出结果传递给 less 命令,以便我们能够对文件的内容进行分页显示:二、匹配模式AWK 工具可以通过匹配模式来确定要执行操作的行。
在 AWK 中,模式可以是以下之一:1. 文本模式文本模式以单引号或双引号括起来,用于指定要匹配的文本字符串。
例如,我们可以使用下面的命令来匹配包含“Linux” 的行:在这个命令中,模式为 /Linux/,表示会匹配到所有包含字符串“Linux” 的行,而 action 为 print,表示将所有匹配到的行输出。
2. 行号模式我们可以使用行号模式来匹配行号,以便执行特定的操作。
例如,我们可以使用下面的命令来输出文件的第二行:我们也可以使用正则表达式的形式定义一个正则表达式,以便匹配文本的模式。
例如,我们可以使用下面的命令来匹配包含以大写字母开头的字符串的行:在这个命令中,模式为 /^[A-Z]/,表示只匹配以大写字母开头的行,并将匹配到的行输出。
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命令详解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命令进行文本格式化和处理awk命令是一个强大且灵活的文本处理工具。
它可以用于对文本文件进行格式化和处理,包括提取特定字段、计算总和、进行条件筛选等。
在本文中,我们将介绍一些使用awk命令的高级技巧,让您更好地掌握这个工具。
一、基本语法和工作原理(300字)awk命令的基本语法如下:```awk '条件表达式' 文件名```其中,条件用于筛选匹配的行,表达式用于指定处理规则。
awk命令会读取文本文件的每一行,并根据条件和表达式进行处理。
如果没有指定文件名,默认从标准输入读取数据。
awk命令的工作原理是将每一行分割为若干字段,并将这些字段存储在内置变量中。
用户可以在表达式中使用这些字段进行计算和判断。
处理完一行后,awk命令会自动进行下一行的处理,直到文件结束。
二、文本格式化操作(500字)awk命令可以用于对文本文件进行格式化操作,如重新排列字段、对齐列等。
下面是一些常用的文本格式化操作示例:1. 重新排列字段假设我们有一个以制表符分隔的文本文件,每行记录包含姓名、年龄和城市。
现在我们想更改字段顺序,并以逗号分隔字段。
可以使用awk命令进行如下操作:```shellawk -F '\t' '{print $3 "," $1 "," $2}' 文件名```上述命令中,`-F`选项用于指定输入字段的分隔符为制表符。
`print`语句用于输出重新排列后的字段,其中`$1`、`$2`和`$3`表示第1、2和3个字段。
2. 对齐列如果我们的文本文件的字段长度不一致,可以使用awk命令进行对齐列的操作。
假设我们想对城市字段右对齐,并在姓名和年龄字段前添加若干空格,可以使用如下命令:```shellawk '{printf("%10s %s %s\n", $1, $2, $3)}' 文件名```上述命令中,`printf`函数用于按照指定格式输出字段,其中`%10s`表示长度为10的字符串。
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文件中每一行的第二个字段。
Linux awk命令详解AWK介绍0.awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk。
1.awk语言的最基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。
完整的awk脚本通常用来格式化文本文件中的信息。
2.三种方式调用awk1) awk [opion] 'awk_script' input_file1 [input_file2 ...]awk的常用选项option有;① -F fs : 使用fs作为输入记录的字段分隔符,如果省略该选项,awk使用环境变量IFS的值② -f filename : 从文件filename中读取awk_script③ -v var=value : 为awk_script设置变量2) 将awk_script放入脚本文件并以#!/bin/awk -f 作为首行,给予该脚本可执行权限,然后在shell下通过键入该脚本的脚本名调用之。
3) 将所有的awk_script插入一个单独脚本文件,然后调用: awk -f awk脚本文件input_file(s)3. awk的运行过程1) awk_script的组成:① awk_script可以由一条或多条awk_cmd组成,两条awk_cmd之间一般以NEWLINE分隔② awk_cmd由两部分组成: awk_pattern { actions }③ awk_script可以被分成多行书写,必须确保整个awk_script被单引号括起来。
2) awk命令的一般形式:awk ' BEGIN { actions }awk_pattern1 { actions }............awk_patternN { actions }END { actions }' inputfile其中BEGIN { actions } 和END { actions } 是可选的。
Linux命令行使用技巧如何使用awk命令进行数据提取和分析awk是一种强大的文本处理工具,在Linux命令行中使用它可以进行数据提取和分析。
本文将介绍如何使用awk命令进行数据提取和分析的技巧。
一、什么是awk命令awk是一种用于文本处理的强大工具,它可以从文本文件中提取数据、处理数据以及生成报告等。
awk提供了丰富的内置函数和操作符,可以对数据进行各种操作和计算。
使用awk命令需要指定要执行的程序和要处理的文本文件。
二、awk命令的基本用法awk命令的基本用法为:```bashawk 'program' file```其中,program是awk的程序,可以是一行或多行命令;file是要处理的文本文件。
三、使用awk命令提取数据1. 提取指定字段我们可以使用awk命令提取文本文件中的特定字段。
假设我们有一个文本文件data.txt,内容如下:```name,age,genderTom,18,MaleAmy,20,FemaleJohn,22,Male```要提取第二列(age列)的数据,可以使用以下命令:```bashawk -F ',' '{print $2}' data.txt```输出结果如下:```age182022```在命令中,-F指定字段的分隔符为逗号(,),$2表示取第二个字段。
2. 根据条件提取数据我们可以使用awk命令根据条件提取文本文件中符合要求的数据。
假设我们有一个文本文件score.txt,内容如下:```name,scoreTom,80Amy,90John,75```要提取分数大于85的数据,可以使用以下命令:```bashawk -F ',' '$2 > 85 {print}' score.txt```输出结果如下:```name,scoreAmy,90```在命令中,$2 > 85表示第二列的值大于85时才执行打印操作。
Linux命令高级技巧如何使用awk进行文本处理Linux命令高级技巧:如何使用awk进行文本处理在Linux系统中,awk是一个功能强大的文本处理工具。
它可以读取文本文件,逐行处理并执行指定的操作。
本文将介绍如何使用awk 进行文本处理,并探讨一些高级技巧。
一、awk的基本语法awk的基本语法为:```shellawk 'pattern { action }' file```其中,pattern是要匹配的条件,action是要执行的操作,file是要处理的文件。
当pattern匹配成功时,执行相应的action。
二、使用awk进行列操作awk非常适合进行列操作,可以方便地处理CSV文件等含有大量数据的表格文件。
下面是一些常用的列操作:1. 打印某列的内容```shellawk -F ',' '{ print $1 }' file.csv```上述命令会打印文件file.csv中每行的第一列内容。
-F选项用于指定字段的分隔符,这里使用逗号作为分隔符。
2. 计算某列的和```shellawk -F ',' '{ sum += $2 } END { print sum }' file.csv```该命令将计算file.csv文件中第二列的所有值的总和,并在最后打印出来。
3. 打印多个列的内容```shellawk -F ',' '{ print $1, $3 }' file.csv```该命令会打印文件file.csv中的第一列和第三列的内容。
4. 根据某列的值进行筛选```shellawk -F ',' '$2 > 10 { print $0 }' file.csv```该命令会打印文件file.csv中第二列大于10的行。
三、使用awk进行文本操作除了列操作,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是一个变量,用于累加每个字段的值。
linux的awk用法awk是一种强大的文本处理工具,可以在Linux命令行中使用。
它的用法非常灵活,可以用来过滤、处理、转换、排序等等。
本文将介绍awk基本的用法。
awk的基本语法是:```awk 'pattern {action}' file```其中,pattern是模式,用于匹配文本行;action是操作,用于处理匹配到的文本行。
file是待处理的文件名。
下面是一些常用的awk用法:1. 打印文本行最简单的awk用法是打印文本行:```awk '{print}' file```这将打印文件中的所有文本行。
2. 使用字段分隔符awk默认使用空格作为字段分隔符,可以使用-F选项指定其他分隔符:```awk -F: '{print $1}' /etc/passwd```这将打印/etc/passwd文件中的所有用户名。
3. 使用条件匹配可以使用条件匹配来过滤文本行。
例如,以下命令将打印包含关键词“error”的文本行:```awk '/error/ {print}' file```可以使用正则表达式来匹配更复杂的模式。
4. 使用变量和运算符awk支持使用变量和数学运算符。
例如,以下命令将打印文件中第二列的和:```awk '{sum += $2} END {print sum}' file```可以使用if语句来实现更复杂的操作。
以上是awk的基本用法,可以根据需要进行扩展。
Linux awk命令使用详解简单介绍一下,awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大,这是我们玩linux的必备基本功,若要对其身世有更详尽的了解,自行搜索即可。
对于工具的知识,笔者尽量将每个知识点的简要说明,并给出实例。
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
用法:awk [options] 'scripts' file1,file2...awk [options] 'pattern {action}' file1,file2...options是awk的支持的选项,譬如-F -v等; scripts是其处理脚本,包含模式pattern和动作action(模式和动作的关系一般为,模式负责确定有效字段,动作负责对其处理)一、print的简单使用创建一个简单的测试文件如下:[root@mos download]# cat demo.txtWelcome to mos blog.This is a test file.例:打印整行: $0[root@mos download]# awk '{print $0}' demo.txt Welcome to mos blog.This is a test file.例:打印每行的最后一个字段: $NF[root@mos download]# awk '{print $NF}' demo.txt blog.file.例:打印第二个字段: $2[root@mos download]# awk '{print $2}' demo.txt tois例:打印每行的倒数第二个字段,并在其后打印OK[root@mos download]# awk '{print $(NF-1),"OK"}' demo.txt mos OKtest OK例:打印行号[root@mos download]# awk '{print NR,$0}' demo.txt1 Welcome to mos blog.2 This is a test file.例:打印当前系统环境变量的某个特定值,譬如路径,下面俩输出一样[root@mos download]# awk '{print ENVIRON["USER"];}' demo.txtrootroot[root@mos download]# awk 'BEGIN{print ENVIRON["PATH"];}' /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local /bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPS:后面的文件只是为了让print成功执行,BEGIN是执行前可以输出的数据,常用作写为报告标题和测试输出,其内容不能获得与文件修改操作有关的变量,后面会说到;例:awk的默认分隔符为空格,而有些文本字以其他字符为分隔符,以下两例相同[root@mos download]# awk -F: {'print $1,$NF'} /etc/passwd|tail -1mos1 /bin/bash[root@mos download]# awk -v FS=: '{print $1,$NF}' /etc/passwd|head -1root /bin/bash例:修改输出分隔符号,特殊字符需转义,如下几例:[root@mos download]# awk -v OFS=. '{print $1,$NF}' demo.txtWelcome.blog.This.file.[root@mos download]# awk -v OFS="~"'{print $1,$NF}' demo.txtWelcome~blog.This~file.[root@mos download]# awk -v OFS=\" '{print $1,$NF}' demo.txtWelcome"blog.This"file.[root@mos download]# awk -v OFS=9 '{print $1,$NF}' demo.txtWelcome9blog.This9file.[root@mos download]# awk -v OFS=XXXX '{print $1,$NF}' demo.txtWelcomeXXXXblog.ThisXXXXfile.PS: 若在print输出字段的之间不写逗号,则输出分隔符无效,输出的结果会直接连在一起awk中有许多默认的变量,例如之前列出的:$1~$n、$0、FS、OFS 等。
下图为awk内置变量表:属性说明$0 当前记录(作为单个变量)$1~$n 当前记录的第n个字段,字段间由FS分隔FS 输入字段分隔符默认是空格NF 当前记录中的字段个数,就是有多少列NR 已经读出的记录数,就是行号,从1开始RS 输入的记录他隔符默认为换行符OFS 输出字段分隔符默认也是空格ORS 输出的记录分隔符,默认为换行符ARGC 命令行参数个数ARGV 命令行参数数组FILENAME 当前输入文件的名字IGNORECASE 如果为真,则进行忽略大小写的匹配ARGIND 当前被处理文件的ARGV标志符CONVFMT 数字转换格式%.6gENVIRON UNIX环境变量ERRNO UNIX系统错误消息FIELDWIDTHS 输入字段宽度的空白分隔字符串FNR 当前记录数OFMT 数字的输出格式%.6gRSTART 被匹配函数匹配的字符串首RLENGTH 被匹配函数匹配的字符串长度SUBSEP \034声明一下:由于许多变量笔者亦不怎么常用,因此笔者此处未全部列出。
二、printf的使用格式:printf format1,format2..., item1,item2...PS:与print不同的是,首先,其多了个f;然后,其不会自动换行,而且还需要对每个字段指定输出格式。
听起来很麻烦,用起来很爽的。
例:左右对齐打印输出,中间的符号笔者自己添加的,双引号和反斜杠前使用反斜杠转义即可;[root@linuxidc download]# awk '{printf "%15s->%10s\n",$1,$NF}' demo.txtWelcome-> blog.This-> file.[root@linuxidc download]# awk '{printf "%-15s#%10s\n",$1,$NF}' demo.txtWelcome # blog.This # file.[root@linuxidc download]# awk '{printf "%-15s'\''%10s\n",$1,$NF}' demo.txtWelcome ' blog.This ' file.PS:一个单引号的写法太贱了,还有%,得写三个..各种无力吐槽例:以特定格式输出passwd字符[root@linuxidc download]# awk -F: '{printf "%-15s->%10s->%20s\n",$1,$(NF-3),$NF}' /etc/passwd|head -2root -> 0 -> /bin/bashbin -> 1 -> /sbin/nologin例:以几种不同的计数方法打印一些数字[root@linuxidc ~]# awk 'BEGIN{n1=111.29;n2=-3.444;n3=5.6789;printf("%.2f,%.2u,%.2 g,%X,%o\n",n1,n2,n3,n1,n1);}'111.29,18446744073709551613,5.7,6F,157printf的格式都以%开头,后跟字符:具体如下:格式符说明%d 十进制有符号整数%u 十进制无符号整数%f 浮点数%s 字符串%c 显示字符的ASCII码%p 指针的值%e 科学技术法显示数值%x %X 无符号以十六进制表示的整数%o 无符号以八进制表示的整数%g %G 以科学计数法或浮点数的格式显示数值%% 显示其自身修饰符:-: 左对齐这个好使,下面俩试了试,笔者没试出啥感觉..+: 显示数值符号N:显示三、输出重定向awk的输出结果可以直接使用输出重定向和管道,其作用和命令结束再次使用重定向和管道的效果类似,笔者在此不长篇叙述,仅作简单示范和介绍:print items >output_fileprint items >>output_fileprint items | command特殊文件描述符:/dev/stdin:标准输入/dev/sdtout:标准输出/dev/stderr:错误输出/dev/fd/N:某特定文件描述符,如/dev/stdin就相当于/dev/fd/0; 例:将结果输出到当前目录下的某个文本中;下两例效果一样# awk -F: '{printf"%-15s->%+10s->%20s\n",$1,$(NF-2),$NF >"test.txt" }' /etc/passwd# awk -F: '{printf "%-15s->%+10s->%20s\n",$1,$(NF-2),$NF }' /etc/passwd> test1.txtawk的操作符,这些操作符和shell编程中的意思大都一致,因此不做详细解说,又因为单单一个的实例难以表达,笔者下方列出完之后,实例部分大都混合使用,笔者会一一说明。
一、算数操作符操作符描述-x 负值+x 转换为数值x^y 次方x**y 次方x*y 乘法x/y 除法x+y 加法x-y 减法x%y 取余二、字符串操作符:直接将print输出的结果之间不适用逗号或自定义OFS,即可,其实这是一个空值例如:以下两例效果一样[root@linuxidc download]# awk '{print $1 $2}' demo.txt WelcometoThisis[root@linuxidc download]# awk '{print $1$2}' demo.txt WelcometoThisis三、赋值操作符操作符描述= 赋值操作符+= 赋值加操作符-= 赋值减操作符*= 赋值乘操作符/= 赋值除操作符%= 赋值求余操作符^= 赋值求幂操作符**= 赋值求幂操作符PS:需要注意的是,如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代;四、布尔值awk中,任何非0值或非空字符串都为真,反之就为假;五、比较操作符操作符描述> 大于< 小于>= 大于等于<= 小于等于== 等于!= 不等于~ 匹配!~ 匹配取反六、表达式间的逻辑关系符&& :逻辑与|| :逻辑或例:打印系统上uid大于等于500且以m开头的行的首字段;&&与[root@linuxidc ~]# awk -F: '$3>=500 && $1 ~ /^m/{print $1}' /etc/passwdlinuxidclinuxidc1打印系统上uid大于等于500或以v开头的行的首字段;||:或[root@linuxidc ~]# awk -F: '$3>=500 || $1 ~/^v/{print $1}' /etc/passwdvcsanfsnobodystudentvisitorlinuxidclinuxidc1打印系统上uid大于500的以v和m开头的行的首字段:[root@linuxidc ~]# awk -F: '$3>=500 && $1 ~/^m/|| $3>=500 && $1 ~/^v/{print $1}' /etc/passwdvisitorlinuxidclinuxidc1七、条件表达式selector?if=true=exp:if=false=expselector是条件,例如使用index函数判断一个变量中有无特定字符;有无则输出特定表达式if=true=exp:if=false=exp,如下例:在变量值中做查找判断,index是awk的内置函数[root@linuxidc ~]# awk 'BEGIN{msg="My name is linuxidc!";print index(msg,"linuxidc")?"ok":"no";}'ok[root@linuxidc ~]# awk 'BEGIN{msg="My name is linuxidc!";print index(msg,"AAA")?"ok":"no";}'no八、函数调用function_name (parament1,parament2...)用法...您看上面,index函数的例子...对头,就那么用的。