当前位置: 首页 > backend >正文

运维三剑客——awk

grep

awk是一个强大的linux命令,有强大的文本格式化的能力,好比将一些文本数据格式化成专业的excel表的样式
awk早期在Unix上实现,我们用的awk是gawk,是GUN awk的意思


awk更是是一门编程语言,支持条件判断、数组、循环等功能

再谈三剑客
grep,擅长单纯的查找或匹配文本内容
awk,更适合编辑、处理匹配到的文本内容
sed,更适合格式化文本内容,对文本进行复杂处理
三个命令称之为Linux的三剑客

awk文本格式化

awk语法
1. awk [option] 'pattern{action}' file ...
2. awk 参数 ‘条件动作’ 文件

awk options 模式 pattern {action} 文件/数据

- Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是 print 和 printf

  文本内容,,,,打印第一列

 打印第二列

我们执行的命令是 awk '{print $2}',没有使用参数和模式,$2 表示输出文本的 第二列 信息
awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符
awk是按行处理文件,一行处理完毕,处理下一行,根据用户指定的分割符去工作,没有指定则默认空格

$0           表示整行
$NF        表示当前分割后的最后一列
倒数第二列可以写成$(NF-1)

awk内置变量
$n         指定分隔符后,当前记录的第n个字段
$0         完整的输入记录
FS 输入字段分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS 输入记录分隔符(输入换行符),指定输入时的换行符
ORS 输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF NF: number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR NR: 行号,当前处理的文本行的行号。
FNR FNR: 各文件分别计数的行号

 打印1,4,5列

 打印1,5,3列

自动定义输出内容
awk,必须 外层单引号,内层双引号
内置变量 $1、$2 都不得添加双引号,否则会识别为文本,尽量别加引号

 awk参数
参数 -F         指定分割字段符
参数 -v         定义或修改一个awk内部的变量
参数 -f         从脚本文件中读取awk命令

 显示五到六行

 

  显示三到六行

 打印所有行,并写成行数

 显示第一列字段数

 显示第一列和倒数第二列

 awk取IP

awk分隔符

 文本内容,,,,-F  定义分隔符,下面是#为分隔符,打印第二列

  打印第一列,并显示字段数 ,然后用“=”连接。

 打印第一列,显示字段数,显示行数

 awk变量

内置变量

自定义变量
- FS 输入字段分隔符,默认为空白字符
- OFS 输出字段分隔符,默认为空白字符
- RS 输入记录分隔符(输入换行符),指定输入时的换行符
- ORS 输出记录分隔符(输出换行符),输出时用指定符号代替换行符
- NF NF: number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
- NR NR: 行号,当前处理的文本行的行号。
- FNR FNR: 各文件分别计数的行号
- FILENAME FILENAME: 当前文件名
- ARGC ARGC: 命令行参数的个数
- ARGV ARGV: 数组,保存的是命令行所给定的各参数

处理多个文件显示行号

FNR各文件分别计数

 我们一般是以回车为一行,这里是以空格为一行,,,RS指定换行符

 ORS 输出记录分隔符,输出时用指定符号代替换行符

FILENAME,显示正在处理的文件

 开始前打印一句好“aruill”,然后再次打印所有行

 ARGV 数组,保存的是命令行所给定的各参数

 自定义变量,并使用  

awk格式化输出 

print和printf的区别

 format的使用
要点:
1、其与print命令的最大不同是,print需要指定format
2、format用于指定后面的每个item的输出格式;
3、printf语句不会自动打印换行符:\n

format格式的指示符都以%开头,后跟一个字符:如下:
%c:显示字符的ASCII码;
%d,%i:十进制整数;
%e,%E:科学计数法显示数值;
%f:显示浮点数;
%g,%G:以科学计数法的格式或浮点数的格式显示数值;
%s:显示字符串;
%u:无符号整数;
%%:显示%自身;

printf修饰符:
-:左对齐,默认右对齐;
+:显示数值符号;printf "%+d"

printf动作默认不会添加换行符

print默认添加换行符

给printf添加格式,,,%s代替字符串,,,\n换行

 awk 格式替换符  想要改变多个变量,必须传入多个

awk模式pattern 

awk默认是按行处理文本,如果不指定任何模式(条件),awk默认一行行处理如果指定了模式,只有符合模式的才会被处理

BEGIN    处理文本之前,awk执行了这个动作    END    所有文本处理完毕后,执行力END模式    

正则表达式匹配game开头 

 awk命令执行流程。。限制性BEGIN{},,读取文件,,END{}

awk双斜正则表达式  

http://www.xdnf.cn/news/10927.html

相关文章:

  • My Retro App项目开发指南
  • 对 `llamafactory-cli api -h` 输出的详细解读
  • MySQL备份与恢复实战指南
  • 社群营销的一些门道
  • 项目任务,修改svip用户的存储空间。
  • 网络攻防技术八:身份认证与口令攻击
  • 力扣刷题Day 69:搜索二维矩阵(74)
  • Python趣学篇:Pygame重现经典打砖块游戏
  • Axure形状类组件图标库(共8套)
  • 苹果ios系统ipa文件签名的圈外签名是什么稳定性怎么样
  • 力扣4.寻找两个正序数组的中位数
  • isp调试 blend模式指什么
  • VS2022下C++ Boost库安装与使用使用
  • 使用 Python + ExecJS 获取网易云音乐歌曲歌词
  • 01电气设计-380V强电部分设计
  • 前缀和基础训练
  • Docker 镜像(或 Docker 容器)中查找文件命令
  • 5月底 端午节
  • 2024-2025-2-《移动机器人设计与实践》-复习资料-1-7
  • C++语法系列之特殊类设计
  • ​​Agentic Voice Stack 热门项目
  • MySQL连接报SSL错误
  • 【QT】认识QT
  • v4l2常见操作-查看当前摄像头信息,帧率,控制参数,分辨率,支持格式,抓图实践等
  • LangChain核心之Runnable接口底层实现
  • Vue中安装插件的方式
  • [蓝桥杯]路径之谜
  • 快速排序(Quick Sort)算法详解(递归与非递归)
  • 第一章-计算机系统概述深化
  • AI数字人技术革新进行时:井云数字人如何重塑人机交互未来?