当前位置:网站首页>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

边栏推荐
猜你喜欢

Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual

Arduino实验三:继电器实验

实现博客营销有哪些技巧

架构基本概念和架构本质

vulnhub pyexp: 1

H.265网页播放器EasyPlayer获取视频流正常,但是播放出现黑屏是什么原因?

MySQL如何 drop 大表

EasyNTS上云网关断电重启后设备离线是什么原因?
![选出表中的中位数记录[构造左右边界 || 问题转换]](/img/02/8d8e515c994c8a1a364f1e299d73f7.png)
选出表中的中位数记录[构造左右边界 || 问题转换]

程序员如何分分钟搞垮一个项目?
随机推荐
2022/08/02------Ugly number
warnings.warn(“Title is more than 31 characters. Some applications may not be able to read the file
MySQL读写分离的三种实现方案
高数---级数
高等数学---第十章无穷级数---常数项级数
大佬们,flinkcdc 2.2 版本采集sqlserver只能采集到全量的数据,不能采集到增量的数
MySQL 啥时候用表锁,啥时候用行锁?这些你都应该知道吧
flink-sql 客户端,咋回事 我show tables 报错
EasyNTS上云网关断电重启后设备离线是什么原因?
技术开发人员常用的安全浏览器
红日安全内网渗透靶场-VulnStack-1
ROS仿真环境搭建
CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
【Azure 事件中心】使用Azure AD认证方式创建Event Hub Consume Client + 自定义Event Position
懵逼!阿里一面被虐了,幸获内推华为技术四面,成功拿到offer,年薪40w
机器学习的方法总结
【Azure 事件中心】使用Azure AD认证方式创建Event Hub Consume Client + 自定义Event Position
如何理解即时通讯开发移动网络的“弱”和“慢”
mysql跨库关联查询(dblink)
深度学习常用公式与命令总结(更新中)