当前位置: 首页 > article >正文

正则表达式(三剑客之awk)

1.awk工具的使用

1.1 截取文档中的某个段

1)打印以 : 为分隔的第一个字段

[root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print $1}'

2)注意事项

-F:作用是指定分隔符。如果不加分隔符,则以空格或者tab为分隔符

print:为打印的动作,用来打印某个字段

$1:为第一个字段,以此类推

$0:比较特殊,表示整行

注意awk的格式,-F后面紧跟单引号,单引号里面为分隔符。

print的动作要用{}括起来,否则会报错。

3)print还可以打印自定义的内容,但是自定义的内容要用双引号括起来

head -n3 /etc/passwd | awk -F ':' '{print $1"#"$2"#"$3"#"$4"#"}'

1.2 匹配字符或者字符串

1)跟sed用法类似,能实现grep的功能,但没有颜色显示

[root@localhost ~]# awk '/oo/' /etc/passwd

2)可以让某个段匹配,这里的~就匹配的意思

[root@localhost ~]# awk -F ':' '$1 ~/oo/' /etc/passwd

3)awk还可以多次匹配

awk -F ':' '/root/{print $1,$3} /sbin/ {print $1,$3}' /etc/passwd

1.3 条件操作符

1)awk可以用逻辑符号进行判断,比如==就是等于,也可以理解为精准匹配

[root@localhost ~]# awk -F ':' '$3=="0"' /etc/passwd

注意:在和数字比较时,若把比较的数字用双引号引起来,那么awk不会认为是数字,而会认为是字符,不加双引号则会认为是数字

2)把大于等于500的行打印出来

[root@localhost ~]# awk -F ':' '$3>=500' /etc/passwd

加引号的结果并不理想,这是因为awk把所有的数字当做字符了

[root@localhost ~]# awk -F ':' '$3>="500"' /etc/passwd

3)!=表示不匹配

针对某一个字段的字符进行逻辑比较

[root@localhost ~]# awk -F ':' '$7!="/sbin/nologin"' /etc/passwd

在两个段之间进行逻辑比较

[root@localhost ~]# awk -F ':' '$3<$4' /etc/passwd

4)还可以使用&&和||,它们分别表示“并且”和“或者”

&&的用法

[root@localhost ~]# awk -F ':' '$3<"7" && $3>"5"' /etc/passwd

||的用法

awk -F ':' '$3<"7" || $7=="/bin/bash"' /etc/passwd

1.4 awk的内置变量

1)awk常用的变量

OFS:OFS和-F选项有类似的功能,也可以用来定义分隔符,但是它是在输出的时候定义

NF:表示用分隔符分隔后一共有多少段

NR:表示行号

2)OFS的用法

[root@localhost ~]# head -5 /etc/passwd | awk -F ':' '{OFS="#"}{print $1,$2,$3}'

还有更高级的一些用法

awk -F ':' '{OFS="#"} {if($3>5) {print $1,$2,$3}}' /etc/passwd

3)变量NF的具体用法

[root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print NF}'

$NF:表示最后一段的值

[root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print $NF}'

4)变量NR的具体用法

[root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print NR}'

还可以使用NR作为判断条件

[root@localhost ~]# awk 'NR>8' /etc/passwd

NR也可以配合段匹配一起使用

[root@localhost ~]# awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd

1.5 awk中的数学运算

1)awk可以更改段值

[root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '$1="root"'

2)awk也可以对各个段的值进行数学运算

第七个字段等于第三个字段加上第四个字段整行的打印出来

head -n2 /etc/passwd | awk -F ':' '{$7=$3+$4;print $0}'

3)awk还可以计算某个段的总和

这里的END是awk特有的语法,表示所有的行都已执行

awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd


http://www.kler.cn/a/455684.html

相关文章:

  • 【RabbitMQ高级篇】消息可靠性问题(1)
  • 柒拾捌- 如何通过数据影响决策(六)- 放大再放大
  • sql group by 多个字段例子
  • VIVO Java开发面试题及参考答案
  • 菜鸟带新鸟——基于EPlan2022的部件库制作(3D)
  • 【Ubuntu 20.4安装截图软件 flameshot 】
  • Edge SCDN酷盾安全重塑高效安全内容分发新生态
  • DevNow x Notion
  • 【python因果库实战13】因果生存分析2
  • STM32-笔记11-手写带操作系统的延时函数
  • 笔记:使用python对飞书用户活跃度统计的一个尝试
  • Go Redis实现排行榜
  • 神经网络-ResNet
  • 【社区投稿】自动特征auto trait的扩散规则
  • Effective C++ 条款32:确定你的 public 继承塑模出 is-a 关系
  • Pytorch | 利用IE-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
  • 如何在 Spring Boot 微服务中设置和管理多个数据库
  • 对外发PDF设置打开次数
  • Python机器学习笔记(十五、聚类算法的对比和评估)
  • 【JavaEE进阶】@RequestMapping注解
  • 《一文读懂BP神经网络:从原理到应用》
  • redis中,msyql数据库读写分离搭建
  • Gitlab17.7+Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用)
  • C语言-结构体嵌套
  • 服务器数据恢复—Lustre分布式文件系统下服务器节点进水的数据恢复案例
  • 【网络工程师教程】六、网络互联与互联网