awk使用 模式总结

来源:互联网 发布:王麟 知乎什么回事 编辑:程序博客网 时间:2024/05/29 15:11
awk使用 模式总结
1. BEGIN { 语句 }
在读取任何输入前执行一次 语句
2. END { 语句 }
读取所有输入之后执行一次 语句
3. 表达式 { 语句 }
对于 表达式 为真(即,非零或非空)的行,执行 语句
4. /正则表达式/ { 语句 }
如果输入行包含字符串与 正则表达式 相匹配,则执行 语句
5. 组合模式 { 语句 }
一个 组合模式 通过与(&&),或(||),非(|),以及括弧来组合多个表达式;对于组合模式为真的每个输入行,执行 语句
6. 模式1,模式2 { 语句 }
范围模式(range pattern)匹配从与 模式1 相匹配的行到与 模式2 相匹配的行(包含该行)之间的所有行,对于这些输入行,执行 语句 。
BEGIN和END不与其他模式组合。范围模式不可以是任何其他模式的一部分。BEGIN和END是仅有的必须搭配动作的模式。


例子:
awk.txt文件
Beth 4.00 0
Dan 3.75 0
kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18
Zeng 3.68 9
1.打印中间某些词
awk '{print $1,$2,$3}' awk.txt
2.打印匹配$3==0的命令
awk '$3==0 {print $1,$2,$3}' awk.txt
3.打印字段数量
awk '{print NF,$1}' awk.txt
4.打印行号
awk '{print NR,$1}' awk.txt
5.打印输入中添加内容
awk '{print "total pay for",$1,"is",$2*$3}' awk.txt
6.printf打印数据
awk '{ printf("total pay for %s is %.2f\n",$1,$2*$3)}' awk.txt
7.对其打印输出 加 “-数字”
awk '{ printf("total pay for %-5s is %.2f\n",$1,$2*$3)}' awk.txt
8.对处理的数据进行排序
awk '{ printf("total pay for %-8s is %.2f\n",$1,$2*$3)}' awk.txt | sort
9.选择输出
awk '$2>=5 { print $2,$3}' awk.txt | sort
10.计算选择输出
awk '$2*$3>=5 { print $2,$3}' awk.txt | sort
11.文本内容选择输出
awk '$1=="Zeng" {print $1,$2,$3}' awk.txt
12.组合逻辑选择查询
awk '$2<5 && $3==0 {print $1,$2,$3}' awk.txt
13.BEGIN与END模式
awk 'BEGIN {print "Name Rate Hours";print ""}{print}' awk.txt
14.计算处理
awk '$3 < 20 {temp=temp+1} END {print temp}' awk.txt
15.处理文本
awk '$2>maxrate {maxrate = $2;maxtemp=$1} END {print "Highest hour:",maxrate,"for",maxtemp}' awk.txt
16.字符串连接
awk '{myname = myname $1 " "} END {print myname}' awk.txt
17.打印最后输出一行
awk '{ last = $0} END {print last}' awk.txt
18.内置函数使用
awk '{print $1,length($1)}' awk.txt
19.if-else语句的使用
awk '$2>4 {n=n+1;pay=pay+$2*$3} END { if ( n>0) print n,pay,pay/n; else print "No free"}' awk.txt
20.while语句的使用
awk '{i=1; while (i<=$3) {printf("\t%.2f\n",$3);i=i+1} }' awk.txt
21.for语句的使用
awk '{for(i=1;i<=$3;i=i+1) printf("\t%.2f\n",$3)}' awk.txt
22.数组的使用
awk '{line[NR]=$0} END {i=NR;while(i>0){print line[i],i=i-1}}' awk.txt
23.去除重复第一行并定义“|”为分隔符
0 0
原创粉丝点击