awk和sed是文本编辑的两大神器,都有相应的书籍介绍,向我等屌丝就不用那么深入了,就将些常用浅显的用法记录(不定期更新)下来供日后查询。
1、语法构成 awk由3部分构成:BEGIN语句块、END语句块和能够使用模式匹配的通用语句块,每个部分为都是可选的。
1 | #单引号或双引号均可,不过有区别下面有举例介绍 |
2、执行流程
- 执行BEGIN {statements} 语句块中的语句;
- 从文件或stdin中读取一行,然后执行pattern {commands}。重复这个过程,直到文件全部被读取完毕;
- 当读至输入流
input stream
末尾时,执行END {commands}语句块。
awk中还有些特殊的变量需要注意下
NR:执行过程中,当前的行号
NF:执行过程中,当前行的当前字段数
$0:执行过程中,当前行的文本内容
$1:执行过程中,当前行第一个字段的文本内容
$2:执行过程中,当前行第二个字段的文本内容
3、用法记录
打印文件指定行区间的内容,如:打印第1行到第2行的内容
1 | $ awk "{if(NR>=1){if(NR<=2)print}}" install.log |
统计文件总行数
1 | $ awk "END {print NR}" install.log |
打印文件指定行区间的内容,使用-v参数将外部变量值传递给awk为每行添加特定的字符串
1 | $ awk -v h=' 自定义字符串' '{if(NR>=2&&NR<=4) print $0 h}' install.log |
传递多个外部变量值给awk,例如传递变量var1、var2、var3的值给awk。
1 | $ var1="string01";var2="string02";var3="string03" |
计算1到100的和,就是C语言嘛。
1 | $ awk 'BEGIN { for(i=1; i<=100; i++) sum+=i; print sum;}' |
双引号" "
和单引号' '
的区别,如果使用的是双引号一些特许的变量需要用转义符号\
转义
1 | # 打印文本的1-2行内容 |
打印文本的字段
1 | # 打印第二行 |
自定义字段界定符,系统默认的界定符是空白字符,使用awk时可以使用-F参数自定义界定符
1 | # 打印第二行内容 |
目前就整这些,以后接触到新的用法时再更新。