awk十三问-【AWK学习之旅】

时间:2022-04-22 19:29:52
---===AWK学习之旅===---
十三个常用命令行处理
 
[root@monitor awkdir]# cat emp.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
 
1.不打印最后一列
|awk 'BEGIN{FS="-";OFS="-"} NF--''
 
2.计数分组
|awk 'BEGIN{FS="-";OFS="-"} NF--'|awk '{a[$1]+=1;}END{for(i in a){print a[i]" " i;}}'
 
AWK知识:
 
3.NF:字段数量,是个内置变量
NR:行号
 
4.printf : 格式
awk '{printf("total pay for %s is $%.2f\n",$1,$2*$3)}' emp.txt
 
5.# 左对齐,占8个字符;小数点后2位,总共占6位。例如:100.02 
awk '{printf("%-8s $%6.2f\n",$1,$2*$3)}' emp.txt
 
6.打印标题:
awk 'BEGIN{print "NAME RATE HOURS"; print ""} {print}' emp.txt
 
统计某字段符合条件的 有多少行:
awk '$3 > 15 {emp = emp + 1} END {print emp} emp.txt
 
7.统计行数:NR
 
8.按某列求平均值:
awk '{ pay = pay + $2 * $3 } END {print NR,"employees" ;print "total pay is",pay}' emp.txt
 
9.求某列的最大值:
wk '$3 > maxrate {maxrate = $3; maxemp = $1} END {print "highest hourly rate:",maxrate,"for",maxemp}' emp.txt
 
10.打印最后一行:
[root@monitor awkdir]# awk '{last = $0} END {print last}' emp.txt
Susie 4.25 18     
 
11.分割某一列:
awk '{split($2,array,".");$2=array[1];print}' test.txt
 
内置函数:length
11.统计字段字符长度:
awk '{print $1,length($1)}' emp.txt
2017-07-25 11:16:10.220 queries client
2017-07-25 11:16:10 queries client
 
12.列转换成行,指定分隔符分割
awk '{names = names $1 ","}END{print names}' a.txt
等同于:cat a.txt |tr '\n' ',' 
[root@monitor awkdir]# awk '{names = names $1 "-"} END {print names}' emp.txt
Beth-Dan-Kathy-Mark-Mary-Susie-
 
13.统计行数,单词,字符数
行数:NR
打印每行的行号:
awk '{print NR}' emp.txt
 
打印总的行数:也就是最后一行行号
awk 'END{print NR}' emp.txt
 
单词:每个域分割就算一个单词,也就是每行的列数
awk '{nw = nw + NF}END{print nw}' emp.txt
 
字符数:
解析:awk 行级处理。每次处理,$0就代表一行内容。 
 [root@monitor awkdir]# awk '{print length($0)}' emp.txt
11
10
13
12
12
13
统计总数:每行的值,一次累加。
[root@monitor awkdir]# awk '{nc = nc + length($0)}END{print nc}' emp.txt
71