1.awk脚本的基本结构
awk ' BEGIN{ print "start" } pattern { commands } END{ print "end" } file
awk由三部分组成,BEGIN,END,和带模式匹配选项的常见语句块,这三部分都是可选项
echo -e "line1\nline2" | awk 'BEGIN {print "start" } { print } END{ print "end" } '
start
line1
line2
end
echo | awk ' { var1 = "v1"; var2 = "v2"; var3 = "v3" ; print var1,var2,var3; } '
v1 v2 v3
echo | awk ' { var1 = "v1"; var2 = "v2"; var3 = "v3" ; print var1 "-" var2 "-" var3; } '
v1-v2-v3
可以用于awk的特殊变量
NR:表示记录数量,在执行过程中对应于当前的行号
NF:表示字段数量,在执行过程中对应于当前行的字段数
$0:包含执行过程中当前行的文本内容
$1:第一个字段的文本内容
$2:第二个字段的文本内容
echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{ print "line no : "NR",No of fields: "NF, "$0 = "$0, "$1 = "$1,"$2 = "$2, "$3 = "$3 } '
line no : 1,No of fields: 3 $0 = line1 f2 f3 $1 = line1 $2 = f2 $3 = f3
line no : 2,No of fields: 3 $0 = line2 f4 f5 $1 = line2 $2 = f4 $3 = f5
line no : 3,No of fields: 3 $0 = line3 f6 f7 $1 = line3 $2 = f6 $3 = f7
打印每一行的第2和第3个字段
awk '{ print $3,$2 } ' file
统计文件的行数
awk ' END { print NR } ' file
将外部变量值传递给awk
var2="a" ; var2="b"
echo | awk ' { print v1,v2 } ' v1=$var1 v2=$var2
a b
用getline读取行
AWK通常默认读取一个文件的所有行,如果只想读取某一行,可以使用getline函数
语法:getline var
seq 5 | awk 'BEGIN { getline; print "read ahead first line", $0 } { print $0 }'
read ahead first line 1
2
3
4
5
使用过滤模式对awk处理的行进行过滤
awk 'NR < 5 ' 行号小于5的行
awk 'NR == 1,NR == 4 ' 行号在1到5之间的行
awk '/Linux/ ' 包含Linux的行
awk '!/Linux/ ' 不包含Linux的行
设置字段界定符,默认字段是空格
模式:-F "delimiter"
awk -F: ' { print $NF } ' /etc/passwd
网友评论