awk入门
可以对列和行进行操作,含有数组、函数等
awk脚本结构
awk ’BEGIN{
print "start" } pattern {
commands } END{
print "end"} fileanme
例如:
$ awk 'BEGIN{ i=0} { i++ } END{ print i }' filename
$ echo -e "line1\nline2" | awk 'BEGIN{ print "Start"} {print} END{ print "End"}'
使用不带参数的print时,他会打印出当前行,当print的参数是以逗号分隔时,参数打印时则以空格作为定界符,在awk的print语句中,双引号是被当作拼接操作符使用的
$ echo | awk '{ var1="v1";var2="v2";var3="v3";print var1,var2,var2;}'
awk特殊变量
NR:表示记录数量,在执行过程中对应于当前行号
NF:表示字段数量。在执行过程中对应于当前行的字段数
$0:这个变量包含执行过程中当前行的文本内容
$1:这个变量包含第一个字段的文本内容
$2:这个变量包含第二个字段的文本内容
$ echo -e ”line1 f2 f3\nline2 f4 f5\nline4 f6 f7" | \
awk '{
print "line no:"NR",No if 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
打印每一行的第二和第三个字段
$awk '{print $3,$2 }' file
统计文件的行数
$ awk 'END{ print NR }' file
累加
$ seq 5 | awk 'BEGIN{ sum=0;print "START"}{print $1"+"; sum+=$1)END{ print "==";print sum }'
将外部变量传递给awk
借助-v,将外部之传递给awk
$ VAR=1000
$ echo | awk -v VARIABLE=$VAR'{ print VARIABLE}'
OR
$var1="Variable1": var2=“Variable2"
$ echo | awk '{print v1,v2 }' v1=$var1 v2=