参考文章:
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
网友评论