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

gawk 指令

1、基本语法

gawk 是 GNU 版本的 AWK,一个强大的文本处理工具,主要用于从文件或输入流中提取数据并进行格式化处理。它适用于处理结构化文本,例如日志文件、CSV 数据等。

语法:

gawk '条件 {动作}' 文件名

$1 表示第一字段,$2 表示第二字段,依此类推;$0 表示整行。

 内置变量

  • NR:当前记录号(行号)。
  • NF:当前记录中的字段个数。
  • FS:字段分隔符(默认是空白)。
  • OFS:输出字段分隔符(默认是空白)。
  • RS:记录分隔符(默认是换行符)。
  • ORS:输出记录分隔符(默认是换行符)。

操作符​​​​​​​

  • 算术运算:+-*/%
  • 比较运算:==!=<><=>=
  • 逻辑运算:&&||!

2、打印字段

文件内容:

打印所有行

gawk '{print $0}' a1.txt 

 结果:

打印第1个字段和第3个字段

  gawk '{print $1,$3}' a1.txt 

结果:

打印行号

gawk '{print NR, $0}' a1.txt

结果:

gawk '{print NR, $3}' a1.txt

打印字段个数

gawk '{print NF,$0}' a1.txt

3、设置分隔符

源文件内容:

将分隔符设置为逗号

gawk -F ',' '{print $1}' a2.txt
gawk -F ',' '{print $2}' a2.txt
gawk -F ',' '{print $3}' a2.txt

结果:

将分隔符设置为|

再例如,源文件:

gawk -F '|' '{print $1,$3}' a3.txt

结果:

4、BEGIN 和 END 块

  • BEGIN 块:在处理任何记录之前执行。
  • END 块:在处理完所有记录之后执行。

  例如:统计行号

源文件

gawk 'BEGIN {print "start calculate:" } {line++}{print "line now:"line }  END {print "finish: total lines:"line }' a1.txt 

结果:

5、累加字段值(求和)

源文件

计算第二个字段的和

 gawk 'BEGIN {print "start calculate:"}  {sum +=$2} {print"sum now:",sum} END {print"sum:",sum} ' a1.txt

运行结果:

假设第二个字段是个十六进制数,需要转换一下:

 gawk 'BEGIN {print "start calculate:"}  {sum +=strtonum("0x"$2)} {print"sum now:",sum} END {print"sum:",sum} ' a1.txt

 6、打印包含某个字段的行

源文件

 gawk '/Teacher/ {print $0}' a1.txt 

7、处理多文件

假设有两个文件

gawk '{print NR,FILENAME, $0}' a5.txt a6.txt

结果:

8、内置函数

gawk 提供了许多内置函数,例如:

  • length($0):计算字符串长度。
  • substr($0, start, length):截取子字符串。
  • tolower($0):将字符串转换为小写。
  • toupper($0):将字符串转换为大写。

例如:打印每行的长度

源文件

gawk '{print $0,length($0)}' a1.txt 

结果:

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

相关文章:

  • NPOI Excel用OLE对象的形式插入文件附件以及插入图片
  • 元器件基础学习笔记——结型场效应晶体管 (JFET)
  • 实战二:开发网页端界面完成黑白视频转为彩色视频
  • 15-Oracle 23ai Vector Search Similarity Search-向量相似性和混合搜索-实操
  • Golang——10、日志处理和正则处理
  • 自制操作系统(五、重写引导部分和C语言的使用)
  • 【数据结构】详解算法复杂度:时间复杂度和空间复杂度
  • 【论文解读】DeepSeek-R1
  • 一款“短小精悍的”手机录屏软件
  • 【C++】类型转换
  • 抖音怎么下载视频?抖音怎么无水印下载别人的视频
  • 蓝凌的流程引擎队列分发器
  • Python whl安装包简介与制作完全指南
  • 【优选算法】前缀和
  • Windows 下端口占用排查与释放全攻略
  • LeetCode-413. 等差数列划分
  • Go深入学习延迟语句
  • 【QT】输入类控件 详解
  • 嵌入式里的时间魔法:RTC 与 BKP 深度拆解
  • 数据通信基础
  • 迷宫问题(一)(C++版本)
  • @ExceptionHandler 默认无法拦截 Aspect(切面)中抛出的异常
  • centos7编译安装LNMP架构
  • docker安装RabbitMQ
  • 一些因子的解释
  • 人工智能--AI换脸
  • iview框架主题色的应用
  • WebWorker-----高频面试题(浏览器篇)
  • 【每天一道算法题】用JavaScript实现的字符串比较算法
  • 【云架构】