编程入门(七)之【Linux进阶操作AWK】

简介: 编程入门(七)之【Linux进阶操作AWK】

🔥前言

首先我们要了解什么是AWK:

Awk是一种用于文本处理和数据提取的编程语言。它通常用于对结构化文本数据进行扫描和处理。Awk语言是根据其三位创始人Alfred Aho、Peter Weinberger和Brian Kernighan的姓氏首字母命名的。Awk提供了强大的文本处理功能,包括模式匹配、提取数据、格式化输出等。

为什么用AWK

Awk语言被用于处理一些文本文件、日志文件等,对数据进行分析和处理,不用加载整个文件,而是逐行进行加载,逐行进行处理。

如何使用AWK

Awk程序由模式(pattern)和动作(action)组成,根据模式匹配相应的数据行,并执行相应的动作。

AWK实际操作

根据AWK的使用介绍,我们在Linux系统中来进行AWK操作,首先准备一txt文件:

101,labixiaoxin,CEO
102,xiaoming,CFO
103,xzs,dagongzai
104,zhangsan,CTO
105,shenlong,CMO
106,xiaozhupeiqi,COO

新建文件:

展示文件内容方便后面的AWK操作:

🚀使用AWK进行取文件行

1、根据指定行号获取

awk 'NR==2' yu.txt

🔥NR 行号-------用于显示行号与指定获取行号

2、根据行号范围获取

awk 'NR>=2 && NR<=4'  yu.txt

🔥 &&

awk 'NR==2 || NR==4' yu.txt

🔥 ||

awk 'NR==2,NR==4' yu.txt

🔥 范围符号

🚀根据AWK指定内容获取

类似于grep筛选语句

1、指定内容获取

awk '/xzs/' yu.txt

2、指定内容范围获取(用于对日志文件时间段的获取)

awk '/101/,/105/' yu.txt

🚀使用AWK进行取文件列

🔥取列格式:

数据源 | awk ‘{动作}’ 数据源文件

示例如下:

1、取ls -l 命令中的第一列和第三列

ls -l | awk '{print $1,$3}'

2、取ls -l 每一行数据和第四列数据 每一行附上行号

ls -l | awk '{print NR,$0,$4}

3、取第一列和最后一列

ls -l | awk '{print $1,$NF}'

🔥取列分割

awk默认识别以空格或者连续空格,或者tab键作为分割符,若要用其他分割符号 :/需要用-F指定:数据源|awk -F ‘分隔符’ ‘{动作}’ 数据源

实例:

1、取出 第一列和第三列,并按列对齐

默认识别空格符不能得到需求

awk '{print $1,$3}' /etc/passwd | column -t

加上分割识别符

awk -F, '{print $1,$3}' yu.txt | column -t

2、提取IP地址信息

ifconfig 查看ip位置

进行筛选:ifconfig | awk '/eth0/,/inet/' | awk 'NR == 2' | awk '{print $2}'

🚀正则表达式

正则使用 --表达式 (建议切割符号,尽量唯一,左右边界唯一)

.*? 0~多个字符

+字符连续出现

^以xxx内容开头

$以内容结尾

[]字符或者[abcz] a或者b或者c或者z

| 字符串或者 abc|z abc或者z

示例:提取下列echo ' inet 10.0.0.200/24 brd 10.0.0.255 scope global ens32' >ip.txt 文本中的ip信息

原方法:利用管道提取两次

awk '{print $2}' ip.txt | awk -F'/' '{print $1}'

正则表达式:

awk -F '[ /]+' '{print $3}' ip.txt

综合示例

1、awk完整格式:支持正则表达式

2、awk -F’分隔符’ ‘条件{动作}’ 数据源

3、条件:关于行的操作 找谁? 根据行号|内容找 找指定行

动作:关于列的操作 干啥? 打印print列操作{} 指定列

示例:

取出/etc/passwd中的 第一行中的第一列和第三列

awk -F':' 'NR==1{print $1,$3}' /etc/passwd

awk 包含符号 ~ 不包含!~

示例:

找到第三列包含1或者2开头的行 /etc/passwd

awk -F':' '$3 ~ /[^12]/{print $1,$3}' /etc/passwd

过滤出 /etc/passwd 第三列以0或者3结尾的行,显示第一列和第三列内容

awk -F: '$3 ~ /[03]$/{print $1,$3}' /etc/passwd

⭐️⭐️⭐️总结

1、awk格式

awk -F'分隔符' '可选条件{可选动作}' 数据源

默认分割符号 空格或者连续空格 或者TAB按键

条件 找谁?找行? 如果没有条件 对所有行操作

动作 干啥? print 打印 如果没有就是显示整行

2、awk支持的符号

1 &&  # 与   
  ||  # 逻辑或者   
  ,   # 范围符号
2     # /内容/     
3 {} # 动作符号    
  NR # 行号   Nunber of Record  #记录行 
  $0  一整行     $1 第一列  $3   第三列  
  $NF # Number of Field 最后一个字段 
4  ~   # 包含符号           
   !~  # 不包含符号

3、awk支持正则表达式

目录
相关文章
|
11天前
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
21 1
|
5天前
|
存储 Linux Android开发
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility 是一个完全开源的工具,用于从内存 (RAM) 样本中提取数字工件。支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证。针对竞赛这块(CTF、技能大赛等)基本上都是用在Misc方向的取证题上面,很多没有听说过或者不会用这款工具的同学在打比赛的时候就很难受。以前很多赛项都是使用vol2.6都可以完成,但是由于操作系统更新,部分系统2.6已经不支持了,如:Win10 等镜像,而Volatility3是支持这些新版本操作系统的。
|
1天前
|
存储 Linux 数据库
【Linux】Linux基础文件与目录管理:成为Linux大师的入门必修课
【Linux】Linux基础文件与目录管理:成为Linux大师的入门必修课
13 3
|
3天前
|
Linux 开发工具
【Linux文本编辑艺术】:从入门到熟练,Vim大师之路揭秘
【Linux文本编辑艺术】:从入门到熟练,Vim大师之路揭秘
|
3天前
|
Linux Unix Windows
【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(二)
【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(二)
|
3天前
|
Linux Unix 安全
【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(一)
【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(一)
|
7天前
|
算法 Linux 测试技术
Linux编程:测试-高效内存复制与随机数生成的性能
该文探讨了软件工程中的性能优化,重点关注内存复制和随机数生成。文章通过测试指出,`g_memmove`在内存复制中表现出显著优势,比简单for循环快约32倍。在随机数生成方面,`GRand`库在1000万次循环中的效率超过传统`rand()`。文中提供了测试代码和Makefile,建议在性能关键场景中使用`memcpy`、`g_memmove`以及高效的随机数生成库。
|
7天前
|
算法 数据挖掘 Linux
探索Linux中的awk命令:强大的文本分析工具
探索Linux中的`awk`命令,一个强大的文本分析工具,用于模式扫描、数据提取与报告生成。本文介绍`awk`的用途、工作原理、特点及应用示例。`awk`基于&quot;模式-动作&quot;框架,从输入数据中匹配模式并执行相应操作。其特点包括:强大的文本处理能力、灵活的I/O及简洁的语法。示例涵盖了打印特定行、处理字段、计算统计值等场景。使用`awk`时要注意理解输入数据、测试脚本、优化性能和添加注释。深入学习以提升数据处理技能。
|
11天前
|
Unix Linux 应用服务中间件
Linux 命令行工具:lsof 入门指南
`lsof` 命令详解:用于列出系统中打开的文件,包括进程、网络连接、管道等。通过 `-p` 查看指定进程文件,`-u` 查看用户文件,`-i` 查看网络连接。还能定位占用端口的进程,显示已删除但仍在使用的文件,以及分析程序如何操作文件。是Linux用户问题定位和性能优化的得力助手。学习并熟练运用 `lsof` 可提升工作效率。
18 2
|
12天前
|
Linux C++
Linux C/C++目录和文件的更多操作
Linux C/C++目录和文件的更多操作