目录
1.awk默认规则
2.处理方式
3.格式
4.运算
5.getline
6. 文件内容匹配过滤打印
7.begin . end模式
8.awk条件判断打印
9.awk三元表达
10.awk精准筛选
11.awk数组
1.awk默认规则
当以多空格为分隔符时 自动压缩成一个
默认操作就是打印
默认分隔符时空格
2.处理方式
先对行处理 再分列
3.格式
-F " " 指定分隔符 -v 变量赋值
内置变量
$0 全部打印 $n 第几列 NR 行号 NF 当前处理行字段数 $NF 最后一个字段
FS 列分隔符
awk '{print $n}' 文件名 打印第几列
awk 'NR==行号 {print}' 文件名 打印第几行
awk 'NR==1;NR==3{print}' 文件名 打印1-3行
awk 'NR==1,NR==3{print}' 文件名 打印1和3行
4.运算
awk 'BEGIN{print 10+10}' 20
5.getline
awk内置函数
当getline 左右无重定向符号(<>)或管道符(|) 打印奇偶行
awk '{print $0;getline}' 文件名 打印奇数行
awk '{getline;print $0}' 文件名 打印偶数行
awk '{getline < "文件1";print $0 > "文件2";}' 文件1
从文件1全量传内容给文件2
用 | 赋值变量
6. 文件内容匹配过滤打印
awk '/^…/{print}' 以…开头
awk '/…$/{print}' 以…结尾
7.begin . end模式
awk 'BEGIN{};{};END{}'
8.awk条件判断打印
awk -F: '$3>500{print $0}' /etc/passwd 打印/etc/passwd第三列大于500
awk -F: '{if($3>10){print $0}}' /etc/passwd 打印/etc/passwd第三列大于10
9.awk三元表达
awk -F: '{max=($3>=$4)?$3:$4;{print $0}}' /etc/passwd
10.awk精准筛选
$n(>< ==) 用于对比数据
$n~"字符串" 代表第n个字段包含某个字符串
$n!~"字符串" 取反
$n==" " 第n个字段为某个字符串
$n!=" " 取反
$NF 最后一个字段
11.awk数组
awk 'BEGIN{a[0]=1;a[1]=2;a[2]=3;print a[1]}' 2
awk 'BEGIN{a[0]=1;a[1]=2;a[2]=3;for(i in a)print i, a[i]}' 0 1
1 2
2 3
索引下标去重
awk '{a[$1]++};END{for(i in a){print i,a[i]}}' test.txt