awk十三问-【AWK学习之旅】
---===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
远方不一定有诗,但有更好的自己!你我共勉!