当前位置:网站首页>awk语法-02-运算、数组、格式化输出
awk语法-02-运算、数组、格式化输出
2022-08-03 18:57:00 【开发运维玄德公】
文章目录
1. 比较运算
1.1 说明
符号 | 说明 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
~ | 匹配 |
!~ | 非匹配 |
1.2 示例
查看普通用户
即id号大于等于1000的用户
[[email protected] ~]# awk -F: '$3>=1000{print $1,$3}' /etc/passwd
cloud_user 1000
liubei 1001
guanyu 1002
查看非root用户
id非0的用户
[[email protected] ~]# awk -F : '$1!="root"{print $1,$3}' /etc/passwd
bin 1
daemon 2
adm 3
lp 4
……
liubei 1001
guanyu 1002
guanping 1003
匹配
[[email protected] ~]# awk -F : '$1~"uan"{
print $1,$3}' /etc/passwd
guanyu 1002
guanping 1003
匹配支持正则
- 包含
guan.*g
的用户
[[email protected] ~]# awk -F : '$1~"guan.*g"{print $1,$3}' /etc/passwd
guanping 1003
- 以
l
开头的用户
[[email protected] ~]# awk -F : '$1~"\\<l.*"{print $1,$3}' /etc/passwd
lp 4
liubei 1001
2. 算术运算
2.1 说明
符号 | 说明 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
^ | 幂 |
2.2 示例(打印奇数id的用户)
[[email protected] ~]# awk -F: '$3%2==1{print $1,$3}' /etc/passwd
bin 1
adm 3
sync 5
halt 7
operator 11
nobody 99
dbus 81
polkitd 999
postfix 89
liubei 1001
guanping 1003
3. 逻辑运算
3.1 说明
符号 | 说明 |
---|---|
&& | 和 |
|| | 或 |
! | 非 |
3.2 示例(打印非系统用户)
即 root(id=0)和普通用户(id>=1000)
[[email protected] ~]# awk -F: '$3==0||$3>=1000{print $1,$3}' /etc/passwd
root 0
cloud_user 1000
liubei 1001
guanyu 1002
guanping 1003
4. 数组
4.1 创建数组
语法
数组名[索引]=值
示例
- 创建 test.awk内容如下
#!/bin/awk -f
BEGIN{
user[0]="liubei";
user[1]="guanyu";
print user[0],user[1]
}
- 执行
[[email protected] ~]# ./test.awk
liubei guanyu
4.2 删除数组
语法
delete 数组名[索引]
示例
- 创建test.awk文件如下
#!/bin/awk -f
BEGIN{
user[0]="liubei";
user[1]="guanyu";
delete user[1];
print user[0],user[1]
}
- 执行
[[email protected] ~]# ./test.awk
liubei
5. printf 格式化输出
和其他语言没有什么区别,简单示例一下:
接收类型
awk -F: '{printf "%s %s \n", $1,$3}' /etc/passwd
说明: %s 字符型,%d 整数型,%f 浮点型
定义列宽
在接收类型中间可以添加数字表示列宽。
- 语法示例
awk -F: '{printf "|%20s|%20s\n", $1,$3}' /etc/passwd
- 执行结果
| root| 0
| bin| 1
| daemon| 2
| adm| 3
| lp| 4
……
对齐方式
在列宽两侧加
-
,表示字串靠哪个方向对齐(默认右对齐)。
- 语法示例
awk -F: '{printf "|%-20s|%-20s\n", $1,$3}' /etc/passwd
- 执行结果
|root |0
|bin |1
|daemon |2
|adm |3
|lp |4
……
完整示例
- 创建myAwk.awk 文件如下
#!/bin/awk -f
BEGIN{
FS=":";
line="============================================";
printf "|%-20s|%-20s|%-20s\n%s\n","Type","Name","Id",line
}
{
if($3==0){
printf "|%-20s|%-20s|%-20s\n","root_user",$1,$3
}else if($3>=1000){
printf "|%-20s|%-20s|%-20s\n", "ord_user",$1,$3
}else{
printf "|%-20s|%-20s|%-20s\n", "sys_user",$1,$3
}
}
- 执行
[[email protected] ~]# ./myAwk.awk /etc/passwd
|Type |Name |Id
============================================
|root_user |root |0
|sys_user |bin |1
|sys_user |daemon |2
|sys_user |adm |3
|sys_user |lp |4
|sys_user |sync |5
|sys_user |shutdown |6
|sys_user |halt |7
|sys_user |mail |8
|sys_user |operator |11
|sys_user |games |12
|sys_user |ftp |14
|sys_user |nobody |99
|sys_user |systemd-network |192
|sys_user |dbus |81
|sys_user |polkitd |999
|sys_user |sshd |74
|sys_user |postfix |89
|sys_user |chrony |998
|ord_user |cloud_user |1000
|ord_user |liubei |1001
|ord_user |guanyu |1002
|ord_user |guanping |1003
边栏推荐
猜你喜欢
Don't look down upon the WebSocket!Long connection, stateful, two-way, full-duplex king is Fried
首届MogDB征文活动开启啦!
H.265网页播放器EasyPlayer获取视频流正常,但是播放出现黑屏是什么原因?
安装porterLB
智能合约安全——delegatecall (2)
丙二醇二乙酸酯(Propylene Glycol Diacetate)
Mkke:为什么无法从Oracle 11g或12c升级到Oracle 23c?
[Notes] Introduction to machine learning
Chrome浏览器开发新截图工具,安全浏览器截图方法
基于ck+redash构建MySQL慢日志+审计日志展示平台
随机推荐
深度学习常用公式与命令总结(更新中)
MD5是对称加密还是非对称加密,有什么优缺点
Blender script 删除所有幽灵对象
读取 resources 目录下的文件路径的九种方式,你知道多少?
实现博客营销有哪些技巧
阿里资深架构师钟华曰:中台战略思想与架构实战;含内部实施手册
程序员如何分分钟搞垮一个项目?
Cobalt Strike (CS) 逆向初探
基于DMS的数仓智能运维服务,知多少?
Mkke:为什么无法从Oracle 11g或12c升级到Oracle 23c?
BinomialTree 二叉树
MD5是对称加密还是非对称加密,有什么优缺点
【微信小程序】NFC 标签打开小程序
Postgresql 备份大小情况!
梅科尔工作室-14天华为培训六
flink-sql 客户端,咋回事 我show tables 报错
Web项目中简单使用线程池
【C语言学习笔记(七)】C语言重定向输入与输出
typescript学习笔记
字节跳动三面拿offer:网络+IO+redis+JVM+GC+红黑树+数据结构,助你快速进大厂!!