awk基本使用方式详解

awk基本用法、awk应用案例及综合脚本 如果要输出到屏幕可以使用命令awk '{a[$1]++}END{print a["abc"]}' shu.txt。按照awk逐行处理的工作特点使用awk '{a[$1]++}' shu.txt 走完每一行得到下列结果。准备一个文档,里面有6行,每行分别是abc、xyz、abc、opq、xyz、abc 然后。用法格式:BEGIN{ 任务1 }{ 任务2 }END{ 任务3 }BEGIN任务 执行1次,读取文档之前执行。END任务 执行1次,读取文档之后执行。 阅读详情

在这里插入图片描述

使用linux系统的人或许都听说过linux三剑客,它们分别是awk、sed和grep,在一切皆文件的linux系统中,这三种文本处理工具的使用显得非常重要。今天就主要介绍三剑客之一的awk,使用awk的优势很多,很方便快速,功能非常之强大,其也是Linux及Unix环境中现有的功能最强大的数据处理引擎之一。


为什么使用awk

awk作为linux中强大的文本处理工具,实际上也是一门编程语言了。因为有awk的存在,一些较为复杂的数据清洗及数据筛选的工作可以以很短的命令轻易地被解决而不需要每次都写一个脚本,正因为其在命令行运行的特点也使其能够通过管道与Shell脚本很好的交互,这是其他编程语言所不能及的(也正是因此听说在很多运维的面试中关于awk的问题的出现几率非常高)。

另外一个特点是awk读取文件时默认按一条条的记录进行读取的(默认就是一行一行地读取,但是awk是可以设定记录分隔符从而不仅仅是按行读取记录的),而在某些编程软件比如python中,若是使用pandas进行读取文件需要先将整个文件载入到内存,这样就十分地占据内存,同时在进行操作时也相对更费时间。但若是在awk中由于其按行操作,若是匹配到目标字符时就不再向后读取文件,相对更加节省内存,也更符合某些工作需求。

当然awk不是万能的,若是将非常复杂的文本处理工作交给awk可能就有点不划算了。

awk的使用方式

使用awk的命令一般为两种,即:

# 1. awk 'pattern {action}' filename
# 2. awk '{pattern + action}' filename

其中第一种使用方式最常用,也更与一般的问题解决方式契合(即先设定条件或“模式”,再对符合条件的目标执行“动作”),而第二种将“模式”和“动作”放在一起,可读性较差同时还可能导致代码混乱。任意的使用方式,只要能得到结果即可,在今天的文章中也只介绍第一种。接下来列出其中的一些要点:

  • pattern代表的是筛选要使用的模式,也可以理解成筛选条件,符合条件的才被执行后面的action中的命令。
    + pattern中能支持的筛选方式有正则表达式、比较计算、逻辑与(pattern && pattern)、逻辑或(pattern || pattern)、逻辑取反(!pattern)、改变优先级(如使用括号)等
  • 使用单引号将pattern和action两部分包围代表这是一个部分不可分割,awk识别这个部分中的模式和命令,并对要操作的文件进行相应的处理。这里最好只使用单引号,因为双引号有时候会出问题,文章后面会解释。
  • action即对符合pattern筛选的记录进行某些动作,可以是linux中的任何语句,但常用的命令有print、split、substr、sub、gsub等。
  • action中使用多个语句需要使用分号分割(与shell中相同)。
  • pattern和action在某些情况下可以省略。
  • 一个awk命令可以包含多次pattern{action},直接连用即可。
  • 若没有要读取的文件,那么需要通过管道命令将要处理的数据交给awk进行处理,如在服务器中对某些记录(如ifconfig)的处理。
  • awk中支持流程控制语句,如while、if、do/while、for、break、continue等等,可以将shell命令和其联动,因此其可以写出很复杂的语句,这种较复杂的语句一般放在脚本中被执行。

除了上面的要点外,awk也可以接一些参数,接下来介绍两种最常用的参数:

  • -f 有时候若是awk命令要执行的代码较多,写在命令行上会很混乱,这时将这些代码写在一个脚本中,使用-f参数表示要执行的pattern和action都来自-f后接的文件。
  • -F 此参数指定用于awk分隔字符的字符,awk默认的分隔字符为空格或者tab键,比如若是csv文件,那么你可以设定-F 为,。

接下来展示几个例子:

使用比较进行筛选

cat /etc/passwd |awk -F ':' '$1=="root" {print $7}'
# 使用上面的命令查看root用户默认使用的shell
# 运行结果如下图,可以直接拷贝到shell命令行中去试试哦,得到的结果应该是一样的。

在这里插入图片描述
可以看到root用户默认使用的shell是bash。分析一下上面的例子:

  • 首先使用cat命令查看passwd文件,并使用管道命令将结果传递给awk进行处理。
  • 由于passwd中的信息都是以冒号:分割的,和默认分隔符不同,因此需要制定要使用的分隔符为:
  • 刚刚提到了awk是逐个读取每条记录的,默认情况也就是逐行读取的,对于每一行中的内容都使用分隔符分隔,这样得到了一个类似列表的结构,使用$符号加上数字就表示要取出列表中的这个数字对应下标的字符串,注意$0代表的是整行。
  • 后面的单引号中的内容就是一个标准的pattern{action}模式,前面pattern中的$1=="root"表示需要筛选的是被分隔符分隔得到的列表中的第一个字符串为"root"的行,只有第一个字符串为"root"才会被筛选。
  • 这里解释一下刚刚提到的为什么不能使用双引号在pattern{action}外面,这是因为在linux中双引号包含的内容会被linux shell获取,从而导致$1这样的变量被shell误解为是shell自身的变量而不是awk中的变量,只有使用单引号才不会导致这样的问题。
  • 通过筛选的行被传给action,这里的action对行进行处理,在这里使用print打印出第七个部分,也就是root所使用的shell。执行结果与预期相同。

当然数值比较也是一样的,这里就不展示例子了。

使用正则表达式进行筛选

正则表达式这里就不多介绍了,其对于编程的重要性不言而喻,linux中的正则表达式也是很重要的,接下来使用正则表达式达到上面例子的效果:

cat /etc/passwd |awk -F ':' '/root/ {print $7}'
# 其实也非常的简单,将要匹配的正则表达式使用两个斜杠包裹起来就行了,这里匹配含有root字符的记录
# 结果也是/bin/bash

逻辑符号

cat /etc/passwd |awk -F ':' '/home/&&$7=="/bin/bash" {print $1}'
# 这里的&&表示前后的两个条件都要符合才行,即含有home目录且默认shell为bash的用户名(第一列)
# 运行结果是很多人名,就不展示出来了,读者可以自己拷贝过去试试

awk语句中的BEGIN和END

上面提到过awk中可以有多个pattern{action},只需要直接连用即可,这里的BEGIN和END就是pattern的一种特殊形式,BEGIN携带的action是在开始处理文本数据之前先要执行的,而END携带的action则是在处理文本数据结束后才执行的,因此中间的处理部分可以被称为main部分,main部分也可以有多项。不要小看这两条语句,实际应用中是十分有用处的。

先看一个简单的例子吧,比如想要看使用bash作为默认shell的用户为哪些,那么可以使用如下的命令:

cat /etc/passwd | awk -F ':' 'BEGIN {print "开始咯"} $7=="/bin/bash" {print $1} END {print "结束咯"}'
# 例子可以直接拷贝到shell命令行运行试试
# 运行结果

在这里插入图片描述
中间有很多用户名,考虑隐私问题不能展示。不过可以看到运行的结果中首先打印出开始,最后再以打印结束而结束,中间的条目是由$7=="/bin/bash" {print $1}所产生的,也就是说BEGIN和END部分都只执行一次,而内部的语句则一次读取一条记录直到整个文件信息读完,这个点需要注意!

接下来展示一个比较有用的例子,即对ifconfig内容的处理,ifconfig命令是用于显示或设置网络设备的命令,默认情况下使用ifconfig命令得到的结果为很长的几段,并且段与段间有一个空行,如下图所示:
在这里插入图片描述
若是想要取得其中ipv4的地址,也就是inet后的内容。接下来分析一下处理过程:

  • 联系到上面提到的记录分隔符,若是将一个段落作为一条记录的读取那么将会比较方便。
  • 那这时候我只需要将分隔符设置为两个换行符(\n\n)即可,如上图所示。
  • 设置分隔符最好在BEGIN中设置,因为在BEGIN中设置的选项会在一开始就被awk获取到,若是在main部分才设置,会先读取一条记录后才获取到设置的分隔符,这个读者感兴趣可以试试。
  • 经过计算后,发现地址在每个段落中的第六个位置(即$6)。

分析结束后写出的代码:

ifconfig |awk 'BEGIN {RS="\n\n"} {print $6}'
# 这里的RS是awk的一种内置变量,意思是记录分隔符。awk中的内置变量有十多个,可以直接使用
# 后面会列出awk中的内置变量

得到的结果如下图:
在这里插入图片描述
若是想要将结果都打印在一行中以tab符号分隔,可以再加一个内置变量即输出分隔符(OFS),默认的输出分隔符是换行符,所以我们看到的每条结果都是以换行符隔开的,使用OFS可以自定义分隔符:

ifconfig |awk 'BEGIN {RS="\n\n";ORS="\t"} {print $6} END {print "\n"}'
# 每个命令间以分号分隔即可
# 这里最后输出结束没有换行符,所以在END处多加了一个换行符

在这里插入图片描述

执行文件中的awk命令

若是执行较短的命令是没有必要将命令写到文件中的,但若是命令很长,逻辑也较为复杂,那么写在脚本中则会比较清晰明了且不易出错,这里我将上面的例子写到文件中做一个展示:

文件内容:
在这里插入图片描述

运行结果同上。

awk中的内置变量

图源:https://www.runoob.com/linux/linux-comm-awk.html
-
其中$、FS、NR、RS等较为常用,其它的变量在需要使用时可以再去深入理解。

叮

awk的功能很强大,它可以完成很多工作,写成脚本也可以写的很复杂,有兴趣的读者可以去看一下骏马金龙这位博主的18个awk的经典实战案例,其中的案例相对较复杂,将awk能完成的较经典的案例都讲了一遍,并且讲解十分清晰,值得一看。分别有博客和视频两版。

参考:https://www.bilibili.com/video/BV1BJ411X7QN?p=14
参考:https://www.runoob.com/linux/linux-comm-awk.html

AWK基础教程 前言 之前针对WorkerHub小程序做的数据分析文章 XXX 收到了一些小伙伴的回复,点名要学习数据分析,其实我也是一知半解,想着来写几篇文章简单聊下我分析的过程。 首先是数据清洗和统计了,这块我并没有用诸如Python之类的脚本语言,虽然Python提供了很多强大的数据分析库如Pandas、Numpy等,但是毕竟要麻烦一些,还要写个脚本,装一堆库(PS:其实就是懒)。 我用的是一个老的Unix工具 AWK,虽然历史比较久远,但是它简洁和丰富的功能可以称之为神器,同时也是后台同学必须要掌握的一个工具, 阅读详情

相关推荐

Linux 三剑客之 awk 实战详解教程

我们知道 Linux 三剑客,它们分别是:grep、sed、awk。在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk。 sed 可以实现非交互式的字符串替换,grep 能够实现有效的过滤功能。与两者相比,awk 是一款强大的文本分析工具,在对数据分析并生成报告时,显得尤为强悍。 awk 强大的功能,是一般 Linux 命令无法比拟的。在本文中,我不会告诉你 awk 也是一种编程语言,免得会吓到你。我们只需把它当做 Linux 下一款强大的文本分析工具即可

696

awk的使用

linux里面的awk命令

xiaoliu的博客 3106

Spark数据倾斜问题+解决方案

1、数据倾斜 数据倾斜指的是,并行处理的数据集中,某一部分(如Spark或Kafka的一个Partition)的数据显著多于 其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈 数据倾斜俩大直接致命后果 1)数据倾斜直接会导致一种情况:Out Of Memory 2)运行速度慢 主要是发生在Shuffle阶段。同样Key的数据条数太多了。导致了某个key(下图中的80亿条)所在的Task数 据量太大了。远远超过其他Task所处理的数据量 一个经验结论是:一般情况下,OOM的原因都是数据倾斜 2、如

诸葛搏毅 6768

AWK 使用详解

awk的工作原理 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分,将每片直接保存在内建的变量中,$1,$2,$3....,引用指定的变量,可以显示指定断,或者多个断。如果需要显示全部的,需要使用$0来引用。可以对单个片断进行判断,也可以对所有断进行循环判断。其默认分隔符为空格 awk的基本用法格式 awk [options] 'program' FILE...... 语句之间用分号分隔 [options] -F : 指明输入时用到的字段分隔符 -v var=VALU

lantian000的博客 3892

JAVA + 海康威视SDK + FFmpeg+ SRS 实现海康威视摄像头二次开发

海康威视SDK接入方案摘要 本文介绍了使用海康威视官方SDK开发物联网平台摄像头接入功能的完整方案。系统采用Java后端集成HCNetSDK控制摄像头,通过FFmpeg将RTSP流转为RTMP推送到SRS流媒体服务器,前端基于HTTP-FLV协议实现视频播放。文章详细说明了开发准备工作,包括SDK下载、SRS部署、FFmpeg安装等关键步骤,并提供了数据库表设计和接口定义。核心部分展示了如何集成海康SDK,包括提取必要代码、加载DLL文件、配置打包插件等具体实现细节,最终形成了一套支持实时预览、回放和下载的

2401_83057947的博客 2263

避开命令行!在VMware vCenter 8.0图形化界面里搞定SSL证书续期全流程

本文详细介绍了在VMware vCenter 8.0图形化界面中完成SSL证书续期的全流程,包括计算机SSL证书、VMCA根证书和STS证书的管理。通过可视化操作,管理员无需使用命令行即可高效处理证书问题,确保vSphere环境的稳定运行。文章还提供了证书监控与预警配置的实用技巧,帮助用户提前规避证书过期风险。

weixin_27051161的博客 282

awk 学习

录自《《LINUX与UNIX SHELL编程指南》读书笔记》(zqf620) AWK介绍 0.awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk。 1.awk语言的最基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。完整的awk脚本通常用来格式化文本文件中的信息。 2.三种方式调用awk 1) awk [

努力的瓜子 830

Tushare Day2——了解stock_basic数据并根据行业和地区进行统计

了解stock_basic数据 1  stock_basic基础信息2  导入包和stock_basic数据、查看基本信息3  根据行业列进行统计3.1  1.先把不同行业列举出来,看一下一共有多少种行业3.2  2.统计每个行业分别有多少家公司3.3  3.把行业从array的二维数组形式变成list形式3.4  4.把行业从list形式转换成文本形式3.5&nbsp

绒绒的Routine 2796

AWK详解

awk详解与使用

wq1205750492的博客 1万+

UWB芯片DW3000之PDOA测向实现源码

本文详细介绍如何基于UWB芯片DW3000之PDOA测向的源码实现。

DT程序员的博客 2615

C#与大数据分析:如何通过上位机进行设备故障诊断与预测

设备故障诊断是通过对设备的运行状态数据进行分析,识别和确认故障的类型和位置。而设备故障预测则是通过对设备的历史数据和运行状态进行分析,预测设备何时可能出现故障,从而进行预防性维护。数据采集:通过各种传感器、PLC、嵌入式设备等采集设备运行数据,如温度、压力、振动、转速、功率等。数据预处理:对采集到的数据进行清洗、去噪、缺失值处理、标准化等操作,以确保数据质量。特征工程:从原始数据中提取出有助于故障诊断和预测的特征,例如统计特征、时域特征、频域特征等。数据分析与建模。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1060

awk的基本使用和调用方式

awk的基本使用和调用方式 1.awk的基本使用 与sed相比,awk不仅能以行为单位处理文件,还可以以列为单位处理文件。awk缺省的行分隔符是换行,缺省的列换行符是连续的空行和Tab,但是行分隔符和列分隔符都可以自定义,比如/ect/passwd文件的每一行有若干个字段,字段之间以:分隔,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。awk实际上是一门很复杂的脚本语言,还有像C

step_ma的博客 857

SAP 供应商寄售(VMI)完整实现方案

摘要:本文详细讲解了SAP系统中供应商寄售(Consignment)和VMI(供应商管理库存)的实现方法。核心逻辑是物料所有权属于供应商,仅在领用时才触发采购。文章包含配置步骤(物料主数据、供应商设置、定价协议、会计科目等)、端到端操作流程(收货、库存查询、领用、结算、付款)、关键差异比较(与普通采购的区别)、核心事务码和数据表。重点说明了寄售流程无需采购订单,通过信息记录维护价格,领用时才产生应付账款的特点,并提供了常见问题解决方案和VMI进阶优化建议。

金牌架构师 1045

awk的基本使用方法

awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。 它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。 awk其实不仅仅是工具软件,还是一种编程语言。不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了。   一、基本用法 awk的基本用法就是下...

老率的IT私房菜 5645

破盾实录|Vueling航空阿卡迈防护逆向:从503挑战到Cookie生成的全流程拆解

摘要:文章分享了作者在爬取西班牙伏林航空(Vueling)机票数据时,遭遇阿卡迈(Akamai)防护系统的实战经历。起初简单的请求被拦截返回503错误,分析发现阿卡迈通过混淆JS代码实施"挑战-验证"机制,需模拟真实浏览器环境才能获取有效Cookie。作者详细拆解了逆向过程:从抓包分析JS挑战流程,到破解代码混淆和控制流平坦化,最终用Python+Pyppeteer成功模拟浏览器特征,突破防护获取数据。整个过程涉及JS反混淆、环境检测绕过和Cookie生成验证等关键技术点,为类似防护系统

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1642

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

shell awk使用详解

目录 awk基本格式 常用命令选项 awk执行过程分析 AWK内置变量  重定向到另一个文件 语法 自定义变量 awk内部自定义 将外部变量值传递给awk 运算符 循环结构 for while do while break continue next exit 数组 创建数组 数组长度 输出数组内容 判断键值是否存在 删除键值 正则 if中使用 ...

今天吃了吗的博客 4208

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【linux】awk的基本使用

awk是shell中一个强大的文本处理工具,被用于处理文本和数据当你心中默念想要使用类似于处理某一行,处理某一列 的文本的功能时,就是awk登场的时候了举个简单的例子是,当我们想知道自己的所有网卡的名字时,可以用ifconfig查看我们会看到类似于上述信息一样密密麻麻的文字,当然我们可以手动CTRL C CTRL V 把网卡名称拿出来,但是如果希望有一种写法可以不用手动去查看获取的话,可以试试使用awk。

andyshi1998的博客 2498

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

awk基本用法及案例详解

0 引言 awk是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。 awk工作原理: #awk -F : '{print $1,$3}' /etc/passwd (1) awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符结束 (2)然后行被:(默认是空格或制表符)分解成字段(或域),...

石榴姐yyds 1499

awk的基本使用

1.awk简介awk:文本处理工具awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。2.awk语法 awk ‘{pattern + action}’ {filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。 3.使用方式1. 命令行方式awk [-F

Pencil的博客 507

【shell】awk基本用法

awk基本用法及举例

sodaloveer的博客 3211

awk详解

Linux awk 命令详解

JintGuo的博客 1774

shell编程之awk命令详解

我们可以在输出内容中添加注释、自定义分隔符等。例如,对于grades.txt。

2301_81704123的博客 1574

Linux awk命令基本使用方法

Linux awk命令基本使用方法 awk命令是一种处理文本的语言,是一个强大的文本分析工具,比较适用于文本的格式化。 awk命令结构: awk 'BEGIN{commands} pattern{command} END{command}' awk工作流程可以分为三个部分: 读取输入文件之前执行的代码段(由BEGIN关键字标识) 主循环执行输入文件的代码段 读取输入文件之后的代码段(由END关键字 标识) 基本用法: 用法一: awk '{[pattern] action}' {filename}

qq_41571224的博客 8086

awk使用方法详解

awk工具 awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容 awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容 awk包含几个特殊的内建变量(可直接用)如下所示: FS:指定每行文本的字段分隔符,默认为空格或制表位; NF:当前处理的行的字段个数; NR:当前处理的行的行号(序数); $0:当前处理的行的整行内容; $n:当前处理的行的第n个字段(第n列); FILENAME:被处理的文件名; RS:数据记录分隔,默认为\n

empty_csx的博客 3521
上一篇: 二代测序技术之illumina测序技术原理简介
下一篇: python3 字符串格式化(%和format)
你大佬来啦
博客等级 码龄7年 322粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值