🔥前言
首先我们要了解什么是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支持正则表达式