linux之awk

news/2024/11/17 17:13:13/文章来源:https://www.cnblogs.com/sharecorner/p/18550755

awk命令

  • 取行
  • 取列
  • 模糊匹配
  • 判断比较
  • 字符串比对
  • 数字比对
  • 支持
  • 格式化输出

1.语法结构

sed -n '3p' file
awk 'NR==3' fileNR awk的内置变量 存储着每行的行号
符号
== 等于第几行
>  大于第几行
>= 大于等于第几行
<  小于第几行
<= 小于等于第几行
!= 不等
&& 并且 类似sed的 1,3
|| 或者 

awk默认就是输出的动作 如果只输出则不需要加print

[root@m01 ~]# awk 'NR==2' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
[root@m01 ~]# awk 'NR==2{print}' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
# awk取出文件大于7的行 
# NR>7 NR<7 NR==7 NR!=7
[root@m01 ~]# awk  'NR>7' passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

2.模糊过滤

语法结构: 支持正则sed -n '//p' fileawk '//' file    # 模糊查找文件中的字符串awk '//,//' file # 区间范围# 过滤包含root的行
[root@m01 ~]# awk '/root/' passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin# 找出以a开头的行
[root@m01 ~]# awk '/^a/' passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin# 找出文件中包含root或者adm的行
[root@m01 ~]# awk '/root|adm/' passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin# 查找出以s或者b开头的行
[root@m01 ~]# awk '/^[sb]/' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin# 按照区间过滤 过滤日志中的时间范围
[root@m01 ~]# awk '/adm/,/ftp/' passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin# 查找以h结尾的行号
[root@m01 ~]# awk '/h$/' passwd 
root:x:0:0:root:/root:/bin/bash
usera:x:1000:1000::/home/usera:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1003::/home/user3:/bin/bash
userb:x:1004:1004::/home/userb:/bin/bash
userc:x:1005:1005::/home/userc:/bin/bash    

3.awk取列

语法结构:awk '{print $1}' file # 取出文件中的第1列默认按照空格或者tab键分隔成列
如果没有空格或者tab键,awk会将整行看成一列
在awk中一切在动作中的字符串都被看做是变量,加上双引号则视为普通的字符串awk内置变量
$0  # 表示整行
$1  # 表示文件的第1列 
$2  # 表示文件的第2列
,   # 逗号表示空格
NF  # 表示每一行最后一列的列号# 取出文件中的第一列
[root@m01 ~]# awk -F ":" '{print $1}' passwd 
root
bin
daemon
adm
lp# 取出文件的第1列和第3列
[root@m01 ~]# awk -F ":" '{print $1,$3}' passwd |column -t
root             0
bin              1
daemon           2
adm              3
lp               4

4.awk数值运算

# 取出文件中倒数第一列,和第二列
[root@m01 ~]# awk -F ":" '{print $NF,$(NF-1)}' passwd 
/bin/bash /root
/sbin/nologin /bin
/sbin/nologin /sbin
/sbin/nologin /var/adm

5.awk指定分隔符

语法结构:awk -F: '{print $1}'    # 第一种指定分隔符方法awk -F ":" '{print $1}' # 第二种指定分隔符方法awk -F "[:/]"awk -F ":|/"     

6.awk模式+动作

模式: 通过NR找出指定的行  awk 'NR==5'通过模糊过滤的方式找出行 awk '/root/'
awk 'NR==5{print $1}'# 输出文件中第2行的第2列
[root@m01 ~]# awk -F ":" 'NR==2{print $2}' passwd 
x# 输出文件中的大于第2行的最后一列内容
[root@m01 ~]# awk -F ":" 'NR>2{print $2}' passwd 
x
x
x
x# 输出包含adm的行的 第3列
[root@m01 ~]# awk -F ":" '/adm/{print $3}' passwd 
3

7.awk比较表达式

  • 按照字符比对查找行
# 查找文件中第1列等于root的行
[root@m01 ~]# awk -F ":" '$1=="root"' passwd 
root:x:0:0:root:/root:/bin/bash# 使用正则匹配字符串 提取第1列包含a的行
[root@m01 ~]# awk -F ":" '$1 ~ "a"' passwd 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
usera:x:1000:1000::/home/usera:/bin/bash# 匹配最后一列以n结尾的行
[root@m01 ~]# awk -F ":" '$NF ~ "h$"' passwd 
root:x:0:0:root:/root:/bin/bash
usera:x:1000:1000::/home/usera:/bin/bash# 对root的行进行取反 第1列不包含root的行
[root@m01 ~]# awk -F ":" '$1 != "root"' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin# 提取第1列不是以r开头的行
[root@m01 ~]# awk -F ":" '$1 !~ "^r"' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

8.awk数字比对

# 第3列等于0的行
[root@m01 ~]# awk -F ":" '$3==0' passwd 
root:x:0:0:root:/root:/bin/bash# 第3列小于5的行
[root@m01 ~]# awk -F ":" '$3<5' passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin# 提取第3列 大于5小于10的行
[root@m01 ~]# awk -F ":" '$3>5&&$3<10' passwd 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin# 提取第3列的第二行 在开始加上uid 结束加上 over
[root@m01 ~]# awk -F ":" 'BEGIN{print "==uid=="}NR==2{print $3}END{print "==over=="}' passwd 
==uid==
1
==over==

9.总结

1.awk取行  *****
awk 'NR==3' file
df -h|awk 'NR==5'
NR==3
NR!=3
NR>3
NR>=3
NR<3
NR<=3
&&
awk 'NR>3&&NR<6' file
||
awk 'NR==5||NR>8' file2.awk模糊过滤  *****
awk '//' file
awk '//,//' file # 区间范围
awk '/^/' file  # 支持正则  ^ $ | []3.awk取列  *****
默认空格tab键为分隔符
$1 $2
awk '{print $1}' file
awk '{print $1,$2}' file
awk '{print $NF}' file  # 取出文件中最后一列
awk '{print $(NF-1)}' file # 取出文件中倒数第2列4.awk指定分隔符 *****
awk -F
awk -F:
awk -F ":" '{print $1}' file
awk -F "[:/]" 指定任意单个
awk -F "[:/]+" 前字符出现连续1一次及以上作为1个字符串
awk -Fa  # 指定a为分隔符5.awk模式+动作 ***** 
awk 'NR==3{print $1}' # 第3行的第1列
awk 'NR>3&&NR<6{print $NF}' # 取出文件中大于3小于6行的最后一列
awk '/root/{print $1,$NF}' # 将包含root行的第1列和最后一列
awk '$3>3{print $3}'  # 大于3的行的第3列6.awk数值比对 字符串比对 *****
awk '$3==0'
awk '$3>0'
awk '$3>80'
awk '$3<60'  #统计不及格的awk -F: '$1=="root"' 
awk -F: '$1 ~ /^r/'
awk -F: '$NF ~ /n$/'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/835414.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联邦学习开山之作Communication-Efficient Learning of Deep Networks from Decentralized Data

1 介绍 1.1 背景 越来越多的手机和平板电脑成为许多人的主要计算设备。这些设备上强大的传感器(包括摄像头、麦克风和GPS),加上它们经常被携带的事实,意味着它们可以访问前所未有的大量数据,其中大部分本质上是私人的。根据这些数据学习的模型持有承诺通过支持更智能的应用…

高级语言程序设计课程第7次个人作业

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C/ 高级语言程序设计课程第7次个人作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13304 学号:102400128 姓名:吴俊衡 1: 问题:无2: 问题:刚开始没想出来怎么弄,后面递归不会就用了多个for循环3:…

TYPE-C PD浅谈(四)

TYPE-C PD浅谈(四) 当对接识别完成后,Provider会先在VBUS上提供5V,接着会在CC脚位上送出Source Capability(SRC_CAP),格式如下:内容定义了供电的各种选项,如共有几组电源可选,相对应的电压电流等。 当Consumer接收到SRC_CAP封包后,会针对电源列表的内容,挑选一组电压…

STM32F103开发

本节我们将会对STM32的硬件资源进行介绍,包括如下内容:点亮LED; 检测按键按下和松开事件; 串口; 点亮128*128 TFT_LCD液晶屏;一、点亮LED 1.1 电路原理图 LED电路原理图如下图所示:其中:LED1连接到PA8`引脚,低电平点亮; LED2连接到PD2引脚,低电平点亮;1.2 GPIO引脚…

团队项目Scrum冲刺-day7

一、每天举行站立式会议 站立式会议照片一张昨天已完成的工作成员 任务陈国金 协助代码沙箱Docker实现凌枫 创建题目页面陈卓恒 协助开发创建题目页面谭立业 协助开发创建题目页面廖俊龙 接口测试曾平凡 前端页面测试曾俊涛 代码沙箱Docker实现薛秋昊 协助代码沙箱Docker实现今…

爱码单车队-冲刺日志第四天

会议记录:今天主要是投入一些后端的开发任务,然后开始实现基础的登录绑定用户的功能。

2024-2025-1 20241314 《计算机基础与程序设计》第八周学习总结

2024-2025-1 20241314 《计算机基础与程序设计》第八周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 2024-2025-1计算机基础与程序设计第八周作业这个作业的目标 功能设计与面向对象设计 面向对象设计过…

bolt.new只要5分钟就能完成1个网站,神奇惊艳

下面是我用bolt.new5分钟完成的首页,前端页面配色和css都很好看,我觉得很惊艳啦!网站截图如下# 网站介绍生成随机yes或者no答案的网站,每次点击oracle按钮,可以生成yes或者no的随机答案,帮助选择困难症用户,轻松选择yes还是no 网站网址https://yesnooracle.dev 功能特点…

2024-2025-1 20241415《计算机基础与程序设计》第八周学习总结

如2024-2025-1 20241415 《计算机基础与程序设计》第八周学习总结 作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第八周作业这个作业的目标 功能设计与面向对象设计,面向对象设计过程,面向对象语言三要…

爱码单车队-冲刺日志第二天

会议记录:在第二天的冲刺中,团队成员在接口文档设计与前端框架方面取得了一定进展。经过小组的共同努力,确定了前段设计与后端对接的接口, 为后续的开发工作奠定了基础。虽然目前前端设计与预期原型存在较大差距,但基本功能已经得以实现。 接下来,团队将继续优化功能,并…

猿人学web端爬虫攻防大赛赛题第20题——2022新春快乐

题目网址:https://match.yuanrenxue.cn/match/20 解题步骤解题之前需要先了解wasm是什么:https://docs.pingcode.com/ask/294587.html看数据包。sign是一串加密的字符串,t一看就是时间戳。全局搜索api/match/20,只有一处。打断点,触发。看下sign的生成逻辑。 "sign&q…

[Tricks-00004]CF1954F(自己胡的 trick,被 Burnside 完爆)

介绍下自己的离奇思路: 先读清楚题意!要求是旋转等价,即两个以 \(c\) 个 \(1\) 开头,总 \(1\) 个数不超过 \(k+c\) 的字符串算一种。 那怎么刻画"只算一种"这个条件呢?一个想法可以是,对每个字符串赋一个权值,一种字符串的权值即旋转出来的每个合法的,把它们…