awk,样式扫描和处理语言,扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
1、判断本地用户类型(管理员/系统用户/普通用户)
-
# if …… ; else if …… ; else条件判断
-
# awk -F: '{if($3==0) print $1,$3,"管理员";else if($3<500) print $1,$3,"系统用户";else print $1,$3,"普通用户"}' /etc/passwd
-
root 0 管理员
-
bin 1 系统用户
-
daemon 2 系统用户
-
tcpdump 72 系统用户
-
oracle 500 普通用户
-
test 501 普通用户
2、打印文件奇数行、偶数行
-
# i逻辑非
-
[root@oracle ~]# seq 10 | awk 'i'
-
[root@oracle ~]# seq 10 | awk '!i'
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
[root@oracle ~]# seq 10 | awk 'i=!i'
-
# NR行号
-
# %模运算、==关系运算
-
[root@oracle ~]# seq 10 | awk 'NR%2==1'
-
1
-
3
-
5
-
7
-
9
-
[root@oracle ~]# seq 10 | awk 'BEGIN{i=1}i=!i'
-
[root@oracle ~]# seq 10 | awk 'NR%2==0'
-
2
-
4
-
6
-
8
-
10
3、
【? : 】:条件运算符
RS:字段分隔符
ORS:输出字段分隔符
-
[root@oracle cuijm]# cat >>xxx<
-
> a
-
> 1
-
> b
-
> 2
-
> c
-
> 3
-
> EOF
-
[root@oracle cuijm]# awk 'ORS=(i=!i)?" ":RS' xxx
-
a 1
-
b 2
-
c 3
4、分行显示PATH变量的数值
-
# echo $PATH
-
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/java/bin:/root/bin:/root/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
-
# -F域分隔符;
-
# for循环;
-
# echo $PATH | awk -F':' '{for (i=1;i<=NF;i++) print i,$i}'
-
1 /usr/lib/qt-3.3/bin
2 /usr/local/sbin
3 /usr/local/bin
4 /sbin
5 /bin
6 /usr/sbin
7 /usr/bin
8 /root/bin
-
# OFS输出字段分隔符;
-
# echo $PATH | awk -F':' '{OFS="-->";for (i=1;i<=NF;i++) print i,$i}'
-
# echo $PATH | awk -F':' '{OFS="-->"}{for (i=1;i<=NF;i++) print i,$i}'
-
1-->/usr/lib/qt-3.3/bin
2-->/usr/local/sbin
3-->/usr/local/bin
4-->/sbin
5-->/bin
6-->/usr/sbin
7-->/usr/bin
8-->/root/bin
-
# BEGIN{}模块;
-
# END{}模块;
-
# echo $PATH | awk -F':' 'BEGIN{OFS="-->";print "-----Begin-----"}{for (i=1;i<=NF;i++) print i,$i}END{print "----END-----"}'
-
-----Begin-----
1-->/usr/lib/qt-3.3/bin
2-->/usr/local/sbin
3-->/usr/local/bin
4-->/sbin
5-->/bin
6-->/usr/sbin
7-->/usr/bin
8-->/root/bin
----END-----
-
阅读(1325) | 评论(0) | 转发(0) |