博客
关于我
linux--shell Awk
阅读量:587 次
发布时间:2019-03-11

本文共 1247 字,大约阅读时间需要 4 分钟。

Awk

Awk是一种强大的文本处理语言,最初于1977年由Alfred Aho、Peter Weinberger和Brian Kernighan发明。它的名字是三位开发者姓氏的首字母缩写(Aho、Weinberger、Kernighan)。Awk主要用于Linux/Unix环境下的文本扫描和处理,能处理标准输入、文件和管道数据。尽管有许多Awk的不同版本,如awk、nawk、gawk、MKS awk等,但在Linux中最常用的有gawk和mawk。而Ubuntu等系统默认使用mawk,RHEL则使用gawk。

Awk的工作流程是逐行扫描文件,从第一行到最后一行。它会将每一行与给定的模式进行匹配,如果匹配成功,则执行指定的处理动作。此外,Awk支持两个特殊模式BEGIN和END,分别用于在数据处理之前和之后执行。

Awk的语法基础

Awk程序的基本结构包括模式和动作,格式为pattern {action}。默认情况下,如果不指定模式,Awk会匹配所有数据,默认的处理动作是print。

Awk的命令行选项包括:

-
-F fs:指定字段分隔符,默认为空格或制表符。 -
-v var=val:在处理动作之前设置变量。 -
-f program-file:使用 脚本文件 来指定处理指令。

Awk的常用操作指令

1. 读取记录并分割字段

awk '{print $1,$2,$3}':输出记录的第1、2、3个字段。
awk '{print $NF}':输出记录的最后一个字段。
awk -F:a '{print $NF}':更改分隔符为 colon(+:),然后输出最后一个字段。

2. 应用正则表达式匹配

awk '/^$/' filename:匹配空行并打印。
awk '/anaconda/' filename:匹配包含“anaconda”的行并打印。

3. 字段操作和内置变量

FS:字段分隔符。
OFS:输出字段分隔符,默认为空格。
ORS:输出记录分隔符,默认为换行符。
NR:输入流的记录编号。
NF:记录的字段个数。

4. gsub和sub函数

gsub:在字符串中替换正则表达式匹配的所有实例。
sub:替换第一个匹配项。

Awk的高级应用

1. 条件判断

if语法格式:
if(表达式) {动作},若表达式为真,执行后续动作。

2. 循环语句

Awk支持whiledo循环,以及for循环。

while循环:用于重复执行某个动作直到条件满足。
do循环:执行预先定义的动作后再检查条件。

3. 数组和函数

数组:可以使用
a[$key]表示数组,
for循环通过变量遍历数组元素。
函数:Awk支持内置函数如
rand(生成随机数)、
gsub
getline(读取文本行)。

4. 统计空白行数

awk '/^$/{count++}' filename:统计并打印空白行数。
awk '/^$/{print count++}' END:在批处理完成后打印总数。

转载地址:http://ipztz.baihongyu.com/

你可能感兴趣的文章
Palo Alto Networks Expedition 远程命令执行漏洞(CVE-2024-9463)
查看>>
Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
查看>>
Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
查看>>
Springboot中@SuppressWarnings注解详细解析
查看>>
Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
查看>>
Panalog 日志审计系统 sprog_upstatus.php SQL 注入漏洞复现(XVE-2024-5232)
查看>>
Panalog 日志审计系统 前台RCE漏洞复现
查看>>
PANDA VALUE_COUNTS包含GROUP BY之前的所有值
查看>>
Pandas - 有条件的删除重复项
查看>>
pandas -按连续日期时间段分组
查看>>
pandas -更改重新采样的时间序列的开始和结束日期
查看>>
SpringBoot+Vue+Redis前后端分离家具商城平台系统(源码+论文初稿直接运行《精品毕设》)15主要设计:用户登录、注册、商城分类、商品浏览、查看、购物车、订单、支付、以及后台的管理
查看>>
pandas :to_excel() float_format
查看>>
pandas :加入有条件的数据框
查看>>
pandas :将多列汇总为一列,没有最后一列
查看>>
pandas :将时间戳转换为 datetime.date
查看>>
pandas :将行取消堆叠到新列中
查看>>
pandas DataFrame 中的自定义浮点格式
查看>>
Pandas DataFrame 的 describe()方法详解-ChatGPT4o作答
查看>>
Pandas DataFrame中删除列级的方法链接解决方案
查看>>