当前位置:网站首页>shell之正则表达式及三剑客awk命令
shell之正则表达式及三剑客awk命令
2022-08-10 16:03:00 【芒地狠】
目录
一、awk介绍
在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务
1、awk常见用法
通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号“{}”用于设置对数据进行的处理动作。awk 可以直接处理目标文件,也可以通过“-f ” 读取脚本对目标文件进行处理。
前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或者 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”,表示“与”, “||”表示“或”,“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别 表示加、减、乘、除、取余和乘方。
2、awk的工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
3、awk的格式
格式1: awk 【选项】 '模式或条件{操作} ' 文件1 文件2
格式2: awk -f 脚本文件 文件名
1、awk 包含几个特殊的内建变量
FS | 指定每行文本的字段分隔符,默认为空格或制表位(tab) |
NF | 当前处理的行的字段个数 |
NR | 当前处理的行的行号(序数) |
$0 | 当前处理的行的整行内容 |
$n | 当前处理行的第 n 个字段(第 n 列) |
FILENAME | 被处理的文件名 |
RS | 数据记录分隔,默认为\n,即每行为一条记录 |
2、awk选项
-F | 以XX为分隔符 |
-v | 变量赋值 |
二、awk的例子
1、awk按列输出
指定分隔符 打印第1 2 3列 head /etc/passwd | awk -F: '{print $1,$2,$3}'
指定分隔符输出第3列大于1000 awk -F: '$3>1000' /etc/passwd
指定分隔符输出第3列<5的,且打印第1 3 列 awk -F: '$3<5{print $1,$3}' /etc/passwd
查找本机ip ifconfig ens33 | awk '/netmask/ {print $2}'
指定x为分隔符打印第1列 head /etc/passwd | awk -Fx '{print $1}'
输出时用空格隔开需要在$直接加逗号(,) head /etc/passwd | awk -F: '{print $1,$2,$3}'
列之间插入制表符 “\t” head /etc/passwd | awk -F: '{print $1"\t"$2"\t"$3}'
以 . 为分割 awk -F. '{print $2}' 3.txt
以多个分隔符 [ : / ]
输出root开头的行
2、awk按行输出
awk -F: '{print $0}' 12 awk '{print}' 12 等同于cat 12
输出每行中(以空格或制表位分隔)
输出包含root的行 awk '/root/' 12
$1与$6间隔开用,或者“ 你好 ”
3、awk的内建变量使用
NR:表示该处理的行序号是多少
NF:表示该处理的行,有多少列
NF显示每行有多少列(要指定分隔符)
NR显示行号
显示行号,并显示每一行的内容
输出第一行 NR==1
输出1-3行
输出第一行及第3行
输出奇数行
输出偶数行
开头和结尾增加 BEGIN开头 END结尾
打印最后一行 awk -F: '{print NR,$NF}' 12 | head -n5
输出倒数第2列 awk -F: '{print NR,$(NF-1)}' 12 | head -n5
输出最后一行并输出行号 awk -F: 'END{print NR,$0 }' 12
第几行有几列 head -5 12 | awk -F[:/] '{print "第"NR"行有"NF"列"}'
FS的使用
OFS的使用 (定义输出以XX分割)
第2行 第2行第1列
多行合并为一行输出
模糊匹配
精确匹配: 可以将要匹配的内容加上双引号
用~表示包含,用 !~ 表示不包含
打印100个数所有能被7整除并且包含数字7的整数数字
综合例子
把名单中工号与姓名位置互换并保存到新文件中
提取版本号
提取已用这一列
提取ip和时间
统计/etc/fstab文件系统类型出现的次数
提取数字
提取根分区可用量
总结
awk常用操作是提取转换文本文件内容,awk功能十分强大,几乎其它文本处理命令能做的,awk都能做。
此处主要介绍awk的几种内置变量。
$n:表示截取哪一列,通常和print一起使用
$0:表示整行内容
NF:表示该行有多少列
NR:表示该行的行号
FNR:表示读取两个文件时,序号会分别从0开始标
FS:表示读取文件的分隔符(默认空格)
OFS:表示输入的内容以什么为分割符(默认空格)
RS:表示读取文件的以什么为换行符(默认\n)
ORS:表示输出的内容以什么为换行符(默认\n)
~:表示包含
!~:表示不包含
边栏推荐
- 【Windows】将排除项添加到安全中心以避免exe被系统自动删除
- Yi Gene|In-depth review: epigenetic regulation of m6A RNA methylation in brain development and disease
- Pigsty:开箱即用的开源数据库发行版
- 关于“算力”,这篇文章值得一看
- 个人博客部署注意的几点问题
- 找到一个超级神奇,百试百灵的解决 ModuleNotFoundError: No module named xxx 的方法
- JVM学习——2——内存加载过程(类加载器)
- I met a 25k+ from Tencent, he let me see what kind of basic ceiling
- 力扣+牛客--刷题记录
- A Sina Weibo semantic sentiment analysis tool developed by ABAP
猜你喜欢
随机推荐
网页分析和一些基础题目
如何将jpg静图做成gif动图?教你1分钟快速合成gif
北海 Kraken:基于 Flutter 构建的高性能 Web 渲染引擎
易基因|深度综述:m6A RNA甲基化在大脑发育和疾病中的表观转录调控作用
LeetCode-337. House Robber III
二维费用的背包问题 ← 模板题
h5开容器,新页面返回遇到的问题
cmake record
redis 源码源文件说明
常用持续集成工具对比
蓝桥ROS之 cmake gcc g++ 默认版本和升级
【服务器数据恢复】raid5崩溃导致lvm信息和VXFS文件系统损坏的数据恢复案例
MySQL-创建、修改和删除表
关于“算力”,这篇文章值得一看
A Sina Weibo semantic sentiment analysis tool developed by ABAP
Chapter one module of the re module,
从抖音到火山引擎——看流媒体技术演进和机会
FTXUI基础笔记(botton按钮组件基础)
怎么学自动化测试
cmake 小技巧 记录