- awk脚本结构
awk ' BEGIN{ statements } statements2 END{ statements } '
- 工作方式
1.执行begin中语句块;
2.从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
3.执行end语句块;
print 打印当前行
- 使用不带参数的print时,会打印当前行;
echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print } END{ print "End" }'
- print 以逗号分割时,参数以空格定界;
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
特殊变量: NR NF $0 $1 $2
NR:表示记录数量,在执行过程中对应当前行号;
NF:表示字段数量,在执行过程总对应当前行的字段数;
$0:这个变量包含执行过程中当前行的文本内容; 当前行的所有内容。
$1:第一个字段的文本内容; 即第一列的内容。
$2:第二个字段的文本内容;即第二列的内容。
$3:第三个字段的文本内容;即第三列的内容。
... $n: 第n个字段的文本内容;即第n列的内容。
$3:第三个字段的文本内容;即第三列的内容。
... $n: 第n个字段的文本内容;即第n列的内容。
echo -e "line1 f2 f3\n line2 \n line 3" | awk '{print NR":"$0"-"$1"-"$2}'
- 打印每一行的第二和第三个字段:
awk '{print $2, $3}' file
- 统计文件的行数:
awk ' END {print NR}' file
- 累加每一行的第一个字段:
echo -e "1\n 2\n 3\n 4\n" | awk 'BEGIN{num = 0 ;print "begin";} {sum += $1;} END {print "=="; print sum }'
传递外部变量
var=1000echo | awk '{print vara}' vara=$var # 输入来自stdinawk '{print vara}' vara=$var file # 输入来自文件
No comments:
Post a Comment