一.awk是什么?
1.awk基本介绍
- AWK 是一种处理文本文件的语言,是一个强大的文本分析工具
- 可以在无交互的模式下实现复杂的文本操作
- 相较于sed常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据。
2.基本格式
awk [选项] ‘模式条件{操作}’ 文件1 文件2...
3.常用选项
-F | “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符 |
-v | 变量赋值 |
注意一定是单引号:'模式或条件 {操作}'
4.常见的内建变量(可直接用)
$0 | 打印所有内容 |
$n | 处理行的第n列 |
NR | 处理的行的行号 |
NF | 处理当前行的字段数。$NF表示最后一个字段 |
FS | 列分割符,指定文本的分割符,默认为空格或制表位。与"-F"作用相同 |
OFS | 输出文本分割符 |
RS | 指定分割符为回车 |
注:内置变量$n要加$,其它变量无需加$,更不能用括号,也不能用引号,否则会当成字符串
二.awk相关示例
1.打印文本内容
格式:
1.指定行打印
awk 'NR==3{print}' 文件名 #打印第3行
awk 'NR==1;NR==3{print}' #打印第1,3行
2.奇偶打印
awk 'NR%2==0{print}' 文件名 #偶数打印
awk 'NR%2==1{print}' 文件名 #奇数打印
3.指定列打印
awk '{print $n}' 文件名
1.1 打印/etc/passwd下第一列
2.awk运算打印
格式:
awk 'BEGIN{print 10+20}' #加法
awk 'BEGIN{print 3**2}' #次方运算或“ ^^ ”
awk支持整数、小数、次方运算
3.awk内置函数:getline
- 如果getline左右没有重定向符(<,>)或没有“ | ”时,awk会跳过第一行,直接读第二行
- 如果getline左右有重定向符或管道符,作用于定向输出
格式:
awk '{geline < "文件名1";print > "文件名2"}' 文件名1
#获取“文件名1”的内容重定向到“文件名2”
4.BEGIN模式
格式:
awk 'BEGIN{..};{..};END{..}' 文件名
在对文件进行操作之前,会先执行BEGIN{..}模式条件或命令;操作中间的{..}是真正的用于处理文件的命令
4.1 例:awk通过什么模式统计文件行数
三、awk条件判断打印
3.1
例1:打印第三行大于10的全部行
例2:取反,打印第三行不大于10的全部行
3.2 awk的条件判断语句
例:如果满足第3列小于0,则打印所在行
3.3 三元表达式
格式:
awk '(条件表达式)?(A表达式或值):(B表达式或值)'
#? 表if
#:表else
如果满足条件第3行大于第4行,则打印第3行,如果不满足则打印第4行
四、awk精确筛选
4.1 数值比较
- >
- =
- <
4.2 字符段筛选
- $n~"字符串":表示第n个字段包含某个字符
- $n!~"字符串":表示第n个字段不包含某个字段
- $n=="字符串":表示第n个字段就是某个字符串
- $n="字符串":表示第n个字段不是某个字符串
- $NF:表示最后一个字符段
4.2.1 示例
表示第7列包含bash,只打印第1列和最后一列
五、awk与数组结合使用
5.1 定义数组
5.2 用数组方式遍历统计重复行次数