当前位置:网站首页>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)
~:表示包含
!~:表示不包含
边栏推荐
猜你喜欢
随机推荐
网页分析和一些基础题目
持续集成实战 —— Jenkins自动化测试环境搭建
glut库更新旧程序无法完成编译问题描述
基础填空以及编程题
使用Jedis连接linux上的redis
Exchange Online审计和监控
IPC:Interrupts and Signals
视频转成gif动图怎么操作?仅需三步在线完成视频转gif
简述 Mock 接口测试
Chapter II Module Encyclopedia "collections Module"
从抖音到火山引擎——看流媒体技术演进和机会
铜锁密码库
积分可以当钱用,阿里推出个人「碳账户」
视频转gif怎样操作?1分钟在线视频转gif制作
接口测试中,应不应该用数据库
如何将jpg图片变成gif?教你一分钟图片合成gif的方法
Pigsty:开箱即用的开源数据库发行版
App自动化测试框架设计与实现
FTXUI基础笔记(botton按钮组件进阶)
MySQL的使用演示及操作,MySQL数据字符集的设置