AWK命令

参考文章:
http://www.zsythink.net/archives/tag/awk/
如果你是awk小白,这篇文章或许对你很有用,但是我更推荐朱双印的博客,因为他写的教程特别有趣,而且还很简单明了,这里我也是参考他的博客学习,然后自己做了一些练习和整理,相信当你学完awk,会像我一样爱上使用linux的文本处理能力。

awk命令的一般模式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

[-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value

' ' 引用代码块

BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符

// 匹配代码块,可以是字符串或正则表达式

{} 命令代码块,包含一条或多条命令

; 多条命令使用分号分隔

END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

更为general的形式为: awk '{}' file

awk '{print $0}' file
#或者
awk '{print }' file
#指定分割符号
awk -F":" '{print $1}' /etc/passwd #打印第一列
#指定分割符,打印特定列,以制定的分割符号
awk -F":" '{print $2,$3}' OFS="\t" /etc/passwd
#统计文件中有指定特征的行
awk 'BEGIN{X=0} /^$/{ X+=1 } END{print "I find",X,"blank lines."}' test 

自定义输出

#制定分割符号,表头,以及选择要打印的内容
awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd

awk -F: '{print NF}' /etc/passwd #显示每行有多少字段(Number Flied)
awk -F: 'NF==4 {print }' /etc/passwd #显示只有4个字段的行
awk -F: 'NF>2{print $0}' /etc/passwd #显示每行字段数量大于2的行

匹配:

//纯字符匹配 !//纯字符不匹配 ~//字段值匹配 !~//字段值不匹配 ~/a1|a2/字段值匹配a1或a2

awk '/root/' /etc/passwd #打印root行
awk -F":" '$1 ~/root/{print $0}' /etc/passwd #打印$1为root的行
awk -F":" '{if($1 ~ /root/) print }' /etc/passwd #打印$1为root的行

条件表达式

==,>,>=,!=,此外if必须用在{}内

awk -F":" '$3>500{print $0}' /etc/passwd #打印第3列值大于500的行
awk -F":" '{if($3>500) print }' /etc/passwd 

你可能感兴趣的:(AWK命令)