4三剑客老大awk
Awk知识:
语法:awk ‘pattern{action}’
|
Awk ‘BEGIN{}END{}’开始和结束 |
|
Awk ‘/hello world/’正则匹配字符串 |
|
Awk ‘/11/,/19/’区间选择,例如seq 30|awk ‘/11/,/19/’ |
|
Awk ‘$2~/xxx/’在第二列中匹配字段xxx |
|
Awk ‘NR==3’取第三行 |
|
Awk ‘NR>1’ 取大于1的所有行 |
awk内置变量
|
FS字段分隔符 |
NF字段数 |
|
OFS输出数据的字段分隔符 |
ORS输出字段的行分隔符,多行拼凑一行 |
|
RS记录分隔符,一行拆多行 |
NR记录数 |
例1:以冒号为分隔符拆行
[root@tyjs09 ~]# echo $PATH|awk 'BEGIN{RS=":"}{print NR $0}'
1/usr/local/sbin
2/usr/local/bin
3/usr/sbin
4/usr/bin
5/root/bin

例2:合并多行为一行
[root@tyjs09 ~]# cat test
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
[root@tyjs09 ~]# cat test|awk 'BEGIN{FS="\n"; ORS=":"}{print $0}'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

例3:求平均值
[root@tys09 ~]# awk 'BEGIN{print 9*9}'
81
[root@tys09 ~]# awk 'BEGIN{printf 2/3}'
0.666667
[root@tys09 ~]# awk 'BEGIN{printf "%.f\n",2/3}'
1
[root@tys09 ~]# awk 'BEGIN{printf "%.2f\n",2/3}'
0.67
[root@tys09 ~]# seq 10 2 20|awk '{sum+=$1}{print sum/NR}'
10
11
12
13
14
15

例4:awk的词典用法
[root@instance-r5y0pf5d ~]# seq 10 2 20|awk '$1>14{data[NR]=$1}END{for (i in data)print data[i]}'
16
18
20

<p> </p><div><div class="cnblogs_code"><div class="cnblogs_code_toolbar"> </div></div></div>

浙公网安备 33010602011771号