LINUX awk用法
awk的基本使用方法

awk的基本使⽤⽅法awk是处理⽂本⽂件的⼀个应⽤程序,⼏乎所有系统都⾃带这个程序。
它依次处理⽂件的每⼀⾏,并读取⾥⾯的每⼀个字段。
对于⽇志、CSV 那样的每⾏格式相同的⽂本⽂件,awk可能是最⽅便的⼯具。
awk其实不仅仅是⼯具软件,还是⼀种编程语⾔。
不过,本⽂只介绍它的命令⾏⽤法,对于⼤多数场合,应该⾜够⽤了。
⼀、基本⽤法awk的基本⽤法就是下⾯的形式。
# 格式$ awk 动作⽂件名# ⽰例$ awk '{print $0}' demo.txt上⾯⽰例中,demo.txt是awk所要处理的⽂本⽂件。
前⾯单引号内部有⼀个⼤括号,⾥⾯就是每⼀⾏的处理动作print $0。
其中,print是打印命令,$0代表当前⾏,因此上⾯命令的执⾏结果,就是把每⼀⾏原样打印出来。
下⾯,我们先⽤标准输⼊(stdin)演⽰上⾯这个例⼦。
$ echo 'this is a test' | awk '{print $0}'this is a test上⾯代码中,print $0就是把标准输⼊this is a test,重新打印了⼀遍。
awk会根据空格和制表符,将每⼀⾏分成若⼲字段,依次⽤$1、$2、$3代表第⼀个字段、第⼆个字段、第三个字段等等。
>$ echo 'this is a test' | awk '{print $3}'a上⾯代码中,$3代表this is a test的第三个字段a。
下⾯,为了便于举例,我们把/etc/passwd⽂件保存成demo.txt。
>root:x:0:0:root:/root:/usr/bin/zshdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologinsync:x:4:65534:sync:/bin:/bin/sync这个⽂件的字段分隔符是冒号(:),所以要⽤-F参数指定分隔符为冒号。
linux的awk命令用法

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动作用法(1)

Linux常⽤基本命令:三剑客命令之-awk动作⽤法(1)1,多个动作,怎么写?ghostwu@dev:~/linux/awk$ cat host.txtname ip地址host1 192.168.1.1host2 192.177.81.1host3 10.0.0.5host4 192.168.3.98host5 192.168.3.98host6 192.168.9.254每个{}表⽰⼀个动作:ghostwu@dev:~/linux/awk$ awk'{print $1} {print $2}' host.txtnameip地址host1192.168.1.1host2192.177.81.1host310.0.0.5host4192.168.3.98host5192.168.3.98host6192.168.9.254他的等价形式,这种⽅式更符合我们的编程习惯,⼀个语句,⼀个分号。
ghostwu@dev:~/linux/awk$ awk'{print $1; print $2}' host.txtnameip地址host1192.168.1.1host2192.177.81.1host310.0.0.5host4192.168.3.98host5192.168.3.98host6192.168.9.254请注意与这种⽅式的区别:ghostwu@dev:~/linux/awk$ awk'{print $1, $2}' host.txtname ip地址host1 192.168.1.1host2 192.177.81.1host3 10.0.0.5host4 192.168.3.98host5 192.168.3.98host6 192.168.9.2542,if语句ghostwu@dev:~/linux/awk$ cat ghostwu.txtghostwu 20manzhangsan 22lisighostwu 30manzhanzhao 40manpeter 20manzhanzhao 30manghostwu@dev:~/linux/awk$ awk'{ if(NR == 1){ print }}' ghostwu.txtghostwu 20man如果是第⼀⾏,就输出, print 后⾯默认为$0( 当前⾏ ), 如果$0没有写ghostwu@dev:~/linux/awk$ awk'{ if(NR == 1){ print $1, $2}}' ghostwu.txtghostwu 20ghostwu@dev:~/linux/awk$ awk'{ if(NR == 1){ print $1; print $2}}' ghostwu.txtghostwu203,利⽤if....else判断账户是普通⽤户还是系统⽤户ghostwu@dev:~/linux/awk$ awk -v FS=":"'{ if ( $3 < 1000 ){ print $1,"是系统⽤户"} else { print $1,"是普通⽤户" } }' /etc/passwd root 是系统⽤户ghostwu 是普通⽤户...4,if ... else... if嵌套ghostwu@dev:~$ awk'{ if( $2 > 0 ) { print "正数" } else if ( $2 == 0 ) { print "0" } else { print "负数" } }' num.txt正数负数ghostwu@dev:~$ cat num.txt1102 -10305,循环ghostwu@dev:~$ awk'BEGIN{ for( i = 1; i <= 6; i++) { print i } }'1234566,while循环ghostwu@dev:~$ awk'BEGIN{ i = 1; do { print "ghostwu",i; i++ } while( i <= 3 )}'ghostwu 1ghostwu 2ghostwu 3ghostwu@dev:~$ awk'BEGIN{ i = 1; do { print "ghostwu"i; i++ } while( i <= 3 )}'ghostwu1ghostwu2ghostwu37,do ... while循环ghostwu@dev:~$ awk'BEGIN{ i = 1; do{ print "ghostwu"i; } while( i++ <= 3 ) }'ghostwu1ghostwu2ghostwu3ghostwu48,continueghostwu@dev:~$ awk'BEGIN{ for( i = 1; i <= 3; i++ ){ if( i == 2 ){ continue; } print i; } }'139,breakghostwu@dev:~$ awk'BEGIN{ for( i = 1; i <= 3; i++ ){ if( i == 2 ){ break; } print i; } }'110, exit,终⽌程序执⾏,如果有END,跳转到END,如果没有,直接退出ghostwu@dev:~/linux/awk$ awk'BEGIN{ print "开始"} {print} END{ print "结束" }' ghostwu.txt开始ghostwu 20manzhangsan 22lisighostwu 30manzhanzhao 40manpeter 20manzhanzhao 30man结束ghostwu@dev:~/linux/awk$ awk'BEGIN{ print "开始";exit} {print} END{ print "结束"" }' ghostwu.txt开始结束11,next,让awk直接从下⼀⾏开始ghostwu@dev:~/linux/awk$ awk'{print;next;}' host.txtname ip地址host1 192.168.1.1host2 192.177.81.1host3 10.0.0.5host4 192.168.3.98host5 192.168.3.98host6 192.168.9.254ghostwu@dev:~/linux/awk$ awk'{if( NR == 1 ){next;} print}' host.txt host1 192.168.1.1host2 192.177.81.1host3 10.0.0.5host4 192.168.3.98host5 192.168.3.98host6 192.168.9.254。
linux awk正则表达式

linux awk正则表达式正则表达式是在文本处理中常用的一种工具,它可以用来匹配、搜索和替换文本中的特定模式。
在Linux系统中,awk是一种流程控制语言,也可以使用正则表达式来处理文本。
以下是一些常用的正则表达式及其含义:1. ^(脱字符号):匹配字符串的开始位置。
例如,^abc表示以字符串“abc”为开头的字符串。
2. $(美元符号):匹配字符串的结束位置。
例如,abc$表示以字符串“abc”为结尾的字符串。
3. .(句号):匹配任意单个字符,但不包括换行符。
例如,a.b可以匹配“aab”、“acb”、“adb”等字符串。
4. *(星号):匹配前面的字符出现零次或多次。
例如,a*b可以匹配“ab”、“aab”、“abb”等字符串。
5. +(加号):匹配前面的字符出现一次或多次。
例如,a+b可以匹配“ab”、“aab”、“abb”等字符串。
6. ?(问号):匹配前面的字符出现零次或一次。
例如,a?b可以匹配“b”、“ab”等字符串。
7. [](方括号):匹配方括号内的任意一个字符。
例如,[abc]可以匹配“a”、“b”、“c”中的任意一个字符。
8. [^](脱字符号和方括号):不匹配方括号内的任意一个字符。
例如,[^abc]可以匹配不含a、b、c字符的任意一个字符。
9. ()(圆括号):捕获匹配的内容。
例如,(ab)+可以匹配“ab”、“abab”、“ababab”等字符串,并会将匹配的内容保存在分组中。
以上只是部分常用的正则表达式,实际使用时还需根据具体场景进行调整。
在awk中,可以使用-F选项来指定分隔符,并使用$1、$2等符号来代表从左往右数的第一、二个字段等。
可以结合正则表达式来解决一些文本处理问题。
例如,下面的命令可以将文件中的所有单词转换成大写字母:awk '{for(i=1;i<=NF;i++) $i=toupper($i)}1' file.txt其中,NF表示当前行的字段数,toupper函数用于将字符串转换成大写字母。
linux awk 正则

linux awk 正则
AWK是一种文本处理工具,它支持使用正则表达式进行模式匹配和处理。
以下是一些常见的AWK正则表达式:
1. 匹配整个字符串:/pattern/,例如:/hello/表示匹配字符串中的“hello”。
2. 匹配字符串的开头:/^pattern/,例如:/^hello/表示匹配字符串开头的“hello”。
3. 匹配字符串的结尾:/pattern$/,例如:/world$/表示匹配字符串结尾的“world”。
4. 匹配特定字符集合:/[characters]/,例如:/[abc]/表示匹配包含字符“a”、“b”、“c”的字符串。
5.匹配单个字符:/./,例如:/./表示匹配任何单个字符。
6.匹配重复次数:/{n,m}/,例如:/[0-9]{3,5}/表示匹配3到5个数字的字符串。
7. 匹配0次或1次:/pattern?/,例如:/colou?r/表示匹配包含单词“color”或“colour”的字符串。
8. 匹配1次或多次:/pattern+/,例如:/bo+n/表示匹配一个或多个字母“o”的字符串。
9. 匹配0次或多次:/pattern*/,例如:/go*/表示匹配一个或多个字母“o”的字符串。
10. 匹配非字符集中的字符:/[^characters]/,例如:/[^aeiou]/表示匹配不包含元音字母的字符串。
Linux命令高级技巧使用awk命令进行字段提取和计算优化

Linux命令高级技巧使用awk命令进行字段提取和计算优化在Linux系统中,awk是一种强大的文本处理工具。
它可以用来从文件或输出中提取特定的字段,进行计算和操作。
本文将介绍如何使用awk命令进行字段提取和计算优化的高级技巧。
一、字段提取在awk命令中,可以使用-F选项指定字段的分隔符。
默认情况下,字段分隔符为制表符或空格。
我们可以根据实际需要来指定其他分隔符,例如逗号、冒号等。
下面是一个示例:awk -F, '{print $1}' file.txt上述命令将以逗号作为字段分隔符,提取文件file.txt中每行的第一个字段并输出。
此外,还可以使用substr函数来提取字段中的一部分内容。
例如,我们可以提取手机号码中的前三位:awk '{print substr($1,1,3)}' file.txt上述命令将提取文件file.txt中每行的第一个字段的前三个字符并输出。
二、字段计算awk命令不仅可以提取字段,还可以进行各种计算操作。
下面是一些常用的计算技巧。
1. 求和可以使用awk的内置变量sum来实现求和操作。
例如,我们可以计算file.txt文件中第二列的和:awk '{sum+=$2} END {print sum}' file.txt2. 求均值可以结合NR(行数)和sum来计算均值。
例如,我们可以计算file.txt文件中第二列的均值:awk '{sum+=$2} END {print sum/NR}' file.txt3. 最小值和最大值使用if语句可以实现最小值和最大值的计算。
例如,我们可以找出file.txt文件中第三列的最大值:awk 'BEGIN {max=0} {if($3>max) max=$3} END {print max}' file.txt4. 统计字段频率可以使用数组来统计字段出现的频率。
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文件中每一行的第二个字段。
Linux命令高级技巧使用awk和cut命令进行文本处理和切割

Linux命令高级技巧使用awk和cut命令进行文本处理和切割Linux命令高级技巧:使用awk和cut命令进行文本处理和切割在Linux系统中,命令行是一种非常强大和灵活的工具,可以用于各种文本处理和切割任务。
其中,awk和cut命令是两个常用的命令,它们可以帮助我们高效地操作文本数据。
本文将介绍如何使用awk和cut命令进行文本处理和切割,并给出一些实际应用示例。
一、使用awk命令进行文本处理awk是一种编程语言,也是一种强大的文本处理工具。
它可以按照指定的字段分隔符将文本数据切割成多个字段,并对每个字段进行处理和转换。
以下是awk命令的常用语法格式:```awk [选项] '条件表达式 { 动作 }' 文件名```在这个语法中,选项是可选的,可以用来指定一些参数。
条件表达式用于筛选满足条件的文本行,动作则是对每个满足条件的行进行的操作。
文件名是需要处理的文本文件。
1. 切割字段awk命令最基本的用法是切割字段。
通过指定字段分隔符,我们可以将文本数据按照指定的字段进行切割。
默认情况下,awk使用空格作为字段分隔符。
以下是一个示例:假设有一个名为data.txt的文本文件,内容如下:```Tom 20 MaleJohn 25 MaleLisa 18 Female```我们需要提取每行中的第一个字段和第三个字段,可以使用以下awk命令:```awk '{print $1, $3}' data.txt```执行上述命令后,会输出以下结果:```Tom MaleJohn MaleLisa Female```可以看到,每行的第一个字段和第三个字段被提取出来并输出。
2. 指定字段分隔符默认情况下,awk使用空格作为字段分隔符。
但是,我们也可以通过指定-F选项来指定其他的字段分隔符。
以下是一个示例:假设有一个名为data.csv的文本文件,内容如下:```Tom,20,MaleJohn,25,MaleLisa,18,Female```我们需要提取每行中的第一个字段和第三个字段,可以使用以下awk命令:```awk -F ',' '{print $1, $3}' data.csv```执行上述命令后,会输出以下结果:```Tom MaleJohn MaleLisa Female```可以看到,通过指定-F ','选项,我们成功地将每行的字段按逗号进行了切割。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AWK尹会生--2010.9.6注:本文档中的代码和图片均来自《sed与awk(第二版)》一 编写awk脚本HELLO,WORLD$ echo 'this line of data is ignored' > test $ awk '{ print "Hello, world" }' testHello, worldtest文件只包含一行,因此,print操作只执行一次。
$ cat test2Hello, world$ awk '{ print }' test2Hello, worldprint语句没有参数,只简单输出每个输入行。
$ awk ‘BEGIN {print “hello,World”}’Hello,WorldBEGIN模式不需要等待输入,它在第一个输入行读入之前执行。
awk程序设计模型awk程序由所谓的主输入(main input)循环组成。
一个循环称作一个例程。
awk允许你编写两个特殊的例程,他们在任何输入被读取前和所有输入都被读取后执行。
他们是与BEGIN和END规则相关的过程。
BEGIN和END过程是可选的。
模式匹配 src1.awk# test for integer, string or empty line./[0-9]+/ { print "That is an integer" }/[A-Za-z]+/ { print "This is a string" }/^$/ { print "This is a blank line." }一个特殊的例子:$ awk -f awkscr4TThat is an integerThis is a string一行可以匹配一条或多条规则程序脚本的注释# 以#号开始的一行记录和字段awk假设它的输入是有结构的,而不是一串无规则的字符。
默认它将每个输入行作为一条记录,而将由空格或制表符分隔的单词作为字段。
连续的多个空格和/或制表符被作为一个分隔符。
John Robinson 666-555-1111字段的引用和分离awk允许使用字段操作符$来指定字段。
$后面可以跟着一个数字或者一个变量。
$1表示第一个字段,$2表示第二个字段,$0表示整个输入记录。
$ awk '{ print $2, $1, $3 }' namesRobinson John 666-555-1111可以使用计算值为整数的表达式来表示一个字段$ echo a b c d | awk 'BEGIN { one = 1; two = 2 } > { print $(one + two) }'c可以使用-F来改变字段分隔符$ awk -F"\t" '{ print $2 }' names666-555-1111$ awk -F"\t+" '{ print $2 }' names$ awk -F"[‘:\t]" '{ print $2 }' names任何3个字符之一都可以被解释为字段分隔符也可以在脚本中指定域分隔符,通过系统变量FS来改变BEGIN { FS = "," } # comma-delimited fields{ print $1 "-" $2 }使用匹配规则/MA/ { print $1 ", " $6 }为了避免假警报,可以使用更精确的匹配$5 ~ /MA/ { print $1 ", " $6 }还可以使用!来反转这个规则的意义$5 !~ /MA/ { print $1 ", " $6 }表达式常量分成两种:字符串型和数字型字符串型在表达式中必须用引号括起来字符串中可以使用转义序列,常用的转义序列有:\n 换行 \t 水平制表符 \r 回车变量x=1x是变量的名字 =是一个赋值操作符 1是一个数字常量注意: 变量区分大小写,所以x和X(大写)表示不同的变量变量名只能由数字字母下划线组成,而且不能以数字开头变量使用不区分类型,使用前不必初始化z = "Hello"z = "Hello" "World"z = $1以上几种都是合法的常用算数操作符DescriptionOperator+Addition-Subtraction*Multiplication/Di v ision%Modulox=1给x赋值y=x+1计算x的值,使它加1,并将结果赋给变量y。
print y打印y的值。
我们可以将这3个语句减少为两个:x=1print x+1常用赋值操作符OperatoDescriptionr++Add 1 to v ariable.--Subtract 1 from v ariable.+=Assign result of addition.-=Assign result of subtraction.*=Assign result of multiplication. /=Assign result of di v ision.%=Assign result of modulo.^=Assign result of e x ponentiation.计算文件中空行的数目# C ount blank lines./^$/ {print x += 1}x=x+1 x+=1 ++x x++这几种有什么区别?# C ount blank lines./^$/ {++x}END {print x}计算学生的平均成绩mona 70 7785 83 70 89j ohn 85 92 78 94 88 91 andrea 89 90 85 94 90 95j asper 84 8880 92 84 82 dunce 64 80 60 60 61 62ellis 90 9889 96 96 92$ awk -f src2.awk gradesj ohn 87.4andrea 86j asper 85.6src2.awk# a v erage fi v e grades{ total = $2 + $3 + $4 + $5 + $6 a v g = total / 5print $1, a v g }也可以使用print $1, total / 5系统变量FS 定义字段分隔符,默认为一个空格OFS 输出的字段分隔符,默认为一个空格RS 记录分隔符,默认为一个换行符ORS 输出的记录分隔符,默认为一个换行符NR 行数FNR 行数,多文件操作时会重新排序NF 输出当前输入记录的编号(字段的个数)FILENAME 文件名例如:$awk–F:‘OFS=”aaa”,ORS=”bbb”{print NR,FNR,NF,FILENAME}’/etc/passwd a.t x t$ print NR “.”,$1, a v g1. j ohn 87.42. andrea 863. j asper 85.6处理多行记录John RobinsonK oren Inc.978C ommonwealth A v e.BostonMA 01760696-0987# block.awk - print first and last fields # $1 = name; $NF = phone number BEGIN { FS = "\n"; RS = " " }{ print $1, $NF }$ awk -f block.awk phones.block John Robinson 696-0987P hyllis C hapman 879-0900Jeffrey Willis 914-636-0000Alice Gold (707) 724-0000Bill Gold 1-707-724-0000关系操作符和布尔操作符关系操作符OperatorDescription<Less than>Greater than<=Less than or e q ual to>=Greater than or e q ual to==E q ual to!=Not e q ual to~Matches!~Does not matchNF == 5 NF(每个输入记录的字段数)的值和5相比较,如果结果为真,那么就进行相应的处理,否则不进行处理。
$5 ~ /MA/ {print $1 “,”$6}注意:关系操作符==和赋值操作符=是不同的布尔操作符Operato r Descriptio n||Logical OR&&Logical AND!Logical NOTNF == 6 && NR > 1字段的数量必须等于6并且记录的编号必须大于1。
NR >1 && NF >=2 || $1 ~ /\t/(NR >1 && NF >=2 )|| $1 ~ /\t/!(NR > 1 && NF > 3)获取文件的信息$ ls -l |awk -f src3.awkBEGIN { print "B Y TES", "\t", "FILE" }{sum += $5++filenumprint $5, "\t", $8}END { print "Total: ", sum, "bytes (" filenum " files)" }格式化打印printf ( format-e x pression [, arguments] )DescriptionC haracterc AS C II 字符d十进制整数f浮点格式s字符串x无符号十六进制常用举例:语法%-width.precision format-specifierprintf(" %d \t %s \n ", $5 , $8 )printf("|%10s|\n", "hello") 右对齐printf("|%-10s|\n", "hello") 左对齐printf("%*.*f\n", 5, 3, my v ar)宽度5 精度3 打印my v ar 向脚本传递参数awk 'script' v ar=v alue inputfile$ v ar=root$ awk –F: -v a=$v ar ‘$1==a {print}’ /etc/passwd二 条件、循环和数组条件语句if ( e x pression )action1[elseaction2]例如:if ( x ) print x如果x是零,则print语句将不执行。