一 awk简介:
awk是一种用于处理数据和生成报告的编程语言
awk可以在命令行中进行一些简单的操作,也可以被写成脚本来处理较大的应用问题。awk与grepsed命令结合,使shell编程更容易
linux下使用的awk是gawk
二 awk如何工作:
awk逐行扫描输入(可以是文件或者管道),按照给定的模式查找匹配的行,然后对这些行执行awk指定的操作
与sed一样.awk不会改变文件的内容。可以使用过重定向将awk输出的内容保存到文件。
三 awk简单用法
-F 指定输入字段的分隔符,默认情况下使用环境变量IFS的值
-f 从指定文件读取awk_script(类似于sed)
-v 为awk设定变量
awk -F: '{print $1}' /etc/passwd :对输入文件以:为分隔符,打印第一列内容(用户名)。 $0整行
awk -F: '{print $1,$3}' /etc/passwd:第一列和第三列
awk -F: '{print $1 “ |” $3}' /etc/passwd:竖线分割
awk -F: '/^root/{print $1,$3}' /etc/passwd:root开头行
-f:将上面引号中的命令放入脚本中
awk -F: -f test.awk /etc/passwd
四 awk_script语法:
awk命令的一般形式:
awk 'BEGIN {actions}
/pattern1/{actions}
...
/patternN/{actions}
END {actions}' input_file
其中BEGIN 和END可选
awk_script可以有一条或者多条awk_cmd组成。每条awk_cmd占一行
每个awk_cmd由两部分组成:/pattren/{actions}
awk_cmd中的/pattern/和{actions}可以省略,但是不能同时省略。/pattern/表示匹配指定模式的行。{actions}省略表示打印整行
{actions}表示对一行中某些列的操作。
awk的执行过程
1、如果存在BEGIN,awk先执行它指定的{actions}
2、awk从输入中读取一行。称为一条输入记录
3、awk将输入的记录分割成数个字段,并将第一个字段放入变量$1中,第二个放入$2中;$0表示整条纪录
4、把当前的输入记录依次与每一个/pattren/比较;如果匹配,就执行相应的actions;如果不匹配,就跳过对应的{actions}直到所有的awk_cmd执行完
5、当一条输入记录处理完毕,处理下一条,直到所有输入处理完毕。
6、awk处理完所有行,如存在END,就执行相应{actions}
默认是空格分隔符。匹配/inet addr/的行
例子:ifconfig | awk '/inet addr/{print $2}' | awk -F: '{print $2}'
223.3.49.34
127.0.0.1
ifconfig | awk '/inet addr/{print $2}' | awk -F: 'BEGIN {print "begin..."} {print $2} END {print "end..."}'
begin...
223.3.49.34
127.0.0.1
end...