linux---awk命令详细教程

awk是一种强大的编程语言,用于在Linux/Unix系统下对文本和数据进行处理。以下是对awk的详细教程:

一、awk简介

awk由Alfred Aho、Brian Kernighan和Peter Weinberger三人开发,其名称分别代表这三位作者姓氏的第一个字母。awk支持用户自定义函数和动态正则表达式等先进功能,是Linux/Unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。

二、awk命令格式和选项

awk命令的基本格式如下:

awk [options] 'script' var=value file(s)

或者

awk [options] -f scriptfile var=value file(s)

其中,常用的命令选项包括:

  • -F fs:指定输入分隔符,fs可以是字符串或正则表达式,如-F:,默认的分隔符是连续的空格或制表符。
  • -v var=value:赋值一个用户定义变量,将外部变量传递给awk。
  • -m[fr] val:对val值设置内在限制。-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

三、awk脚本结构

awk脚本由模式和操作组成。模式可以是正则表达式、关系表达式等,操作则是由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。

awk脚本的基本结构如下:

awk 'BEGIN{ print"start"} pattern{ commands } END{ print"end"}' file

一个awk脚本通常由BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。

  • BEGIN语句块:在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
  • END语句块:在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
  • pattern语句块:中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行。

四、awk内置变量

awk提供了许多内置变量,这些变量可以在awk脚本中直接使用。以下是一些常用的内置变量:

  • $n:当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
  • $0:这个变量包含执行过程中当前行的文本内容。
  • ARGC:命令行参数的数目。
  • ARGIND:命令行中当前文件的位置(从0开始算)。
  • ARGV:包含命令行参数的数组。
  • CONVFMT:数字转换格式(默认值为%.6g)。
  • ENVIRON:环境变量关联数组。
  • ERRNO:最后一个系统错误的描述。
  • FIELDWIDTHS:字段宽度列表(用空格键分隔)。
  • FILENAME:当前输入文件的名。
  • FNR:同NR,但相对于当前文件。
  • FS:字段分隔符(默认是任何空格)。
  • IGNORECASE:如果为真,则进行忽略大小写的匹配。
  • NF:表示字段数,在执行过程中对应于当前的字段数。
  • NR:表示记录数,在执行过程中对应于当前的行号。
  • OFMT:数字的输出格式(默认值是%.6g)。
  • OFS:输出字段分隔符(默认值是一个空格)。
  • ORS:输出记录分隔符(默认值是一个换行符)。
  • RS:记录分隔符(默认是一个换行符)。
  • RSTART:由match函数所匹配的字符串的第一个位置。
  • RLENGTH:由match函数所匹配的字符串的长度。
  • SUBSEP:数组下标分隔符(默认值是34)。

五、awk操作

awk的操作部分可以包含变量或数组赋值、输出命令、内置函数和控制流语句等。

  • 变量或数组赋值:可以在awk脚本中对变量或数组进行赋值操作。
  • 输出命令:使用print或printf函数可以将处理结果输出到标准输出或文件中。
  • 内置函数:awk提供了许多内置函数,如数学函数、字符串函数等,可以在脚本中直接使用。
  • 控制流语句:awk支持if-else、while、for等控制流语句,用于实现复杂的逻辑控制。

六、awk示例

以下是一些awk的使用示例:

下面例子中filename表示目标文件

  • 打印文件的全部内容:

    awk '{print}' filename
    
  • 使用冒号作为字段分隔符,打印第一列:

    awk -F: '{print $1}' filename
    
  • 搜索包含特定字符串的行,并打印整行内容:

    awk -F: '/search_string/{print $0}' filename
    
  • 打印文件的总行数:

    awk 'END{print NR}' filename
    
  • 使用BEGIN和END语句块进行初始化和汇总操作:

    awk 'BEGIN{sum=0} {sum+=$1} END{print sum}' filename
    

七、注意事项

  • awk脚本中的字符串和正则表达式需要使用双引号或单引号括起来。
  • 在awk脚本中,变量和字段的引用不需要使用$符号进行转义。
  • awk默认以空格或制表符作为字段分隔符,但可以通过-F选项指定其他分隔符。

通过以上内容的学习,您可以掌握awk的基本用法和常见操作,并能够使用awk对文本和数据进行高效的处理和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/496079.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python PyMupdf 去除PDF文档中Watermark标识水印

通过PDF阅读或编辑工具,可在PDF中加入Watermark标识的PDF水印,如下图: 该类水印特点 这类型的水印,会在文件的字节流中出现/Watermark、EMC等标识,那么,我们可以通过改变文件字节内容,清理掉…

centos制作离线安装包

目录 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve repotrack 总结 2.环境准备 3.安装 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve 和 repotrack 都是与 YUM(Yellowdog Updater Modified&#xf…

C++的内存四区

文章目录 内存四区1.程序运行前1.1 代码区2.1 全局区2.2 示例 2.程序运行后1.1 栈区1.2 堆区 内存四区 1.程序运行前 在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域。该区域的数据在程序结束后由操作系统释放. 1.1 代码区 ​存放 CPU …

网络工程师常用软件之PING测试工具

老王说网络:网络资源共享汇总 https://docs.qq.com/sheet/DWXZiSGxiaVhxYU1F ☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝ 今天介绍一款好用的PING测试工具,ATKKPING。 ATKKPING的主要功能包括测试…

118.【C语言】数据结构之排序(堆排序和冒泡排序)

目录 1.堆排序 2.冒泡排序 单趟排序的两种情况 情况1.和arr[i]的前一个元素交换,第一次循环结束时i的值为n-1,第二次循环结束时i的值为n-2 情况2.和arr[i]的后一个元素交换,第一次循环结束时i的值为n-2,第二次第一次循环结束时i的值为n-3,... 将单趟排序代码嵌入外循环中…

路由器做WPAD、VPN、透明代理中之间一个

本文章将采用家中TP-Link路由器 路由器进行配置DNS DNS理解知识本文DNS描述参考:网络安全基础知识&中间件简单介绍_计算机网络中间件-CSDN博客 TP LINK未知的错误,错误编号:-22025 TP-LINK 认证界面地址:https://realnam…

Docker部署Sentinel

一、简介 是什么:面向分布式、多语言异构化服务架构的流量治理组件 能干嘛:从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 官网地址:https://sentinelguard.io/zh-c…

机器学习之KNN算法预测数据和数据可视化

机器学习及KNN算法 目录 机器学习及KNN算法机器学习基本概念概念理解步骤为什么要学习机器学习需要准备的库 KNN算法概念算法导入常用距离公式算法优缺点优点:缺点︰ 数据可视化二维界面三维界面 KNeighborsClassifier 和KNeighborsRegressor理解查看KNeighborsRegr…

Java包装类型的缓存

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。 Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or Fal…

施耐德变频器ATV320系列技术优势:创新与安全并重

在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…

Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!

文章目录 说个问题(很严重!!!)写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题(很严重!!!) 平时处理Excel表格…

洛谷 P1014:Cantor 表

【题目来源】https://www.luogu.com.cn/problem/P1014https://www.acwing.com/problem/content/5510/【题目描述】 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。 他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 …

C语言基础:指针(数组指针与指针数组)

数组指针与指针数组 数组指针 概念:数组指针是指向数组的指针,本质上还是指针 特点: 先有数组,后有指针 它指向的是一个完整的数组 一维数组指针: 语法: 数据类型 (*指针变量名)[行容量][列容量]; 案…

华为管理变革之道:奋斗文化与活力

目录 企业文化是什么? 为什么活下去是华为的文化? 活下来,是华为公司的最低纲领,也是华为公司的最高纲领! 资源终会枯竭,唯有文化才能生生不息 企业文化之一:以客户为中心 企业文化之二&a…

JS面试题|[2024-12-26]

1.事件委托是什么 又叫事件代理,原理就是直接利用了事件冒泡的机制来实现,也就是说把子元素的事件绑定到了父元素的身上,如果子元素阻止了事件冒泡,那么委托也就不成立了。 阻止事件冒泡:event.stopPropagation() addE…

upload-labs关卡记录12

直接上传一句话木马,发现提示: 很明显这是一个白名单,而且不是前端的js检查,而是服务端的检查,因此我们使用bp抓包,改一下文件类型试试: 找到包之后,我们对content-type进行一个更改…

ArkTs组件(2)

一.下拉列表组件&#xff1a;Select 1.接口 Select(options: Array<SelectOption>) 参数名类型必填说明optionsArray<SelectOption>是设置下拉选项。 SelectOption对象说明 名称类型必填说明valueResourceStr是 下拉选项内容。 iconResourceStr否 下拉选项图片…

J9学习打卡笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 IInception v3算法实战 网络结构InceptionAInceptionBInceptionCReductionAReductionB辅助分支个人总结 import os, PIL, random, pathlib import torch impor…

软考和 PMP 哪个含金量更高点?

软考高项比较适用于计算机 IT 行业&#xff0c;而 PMP 不受行业限制&#xff0c;各行各业都适用&#xff0c;没有哪个含金量更高的说法 至于哪个更合适&#xff0c;看你想去国企还是民企&#xff0c;国企软考吃香&#xff0c;外企PMP 吃香 下面说下两者具体有什么区别&#x…

面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制

&#x1f3af;导读&#xff1a;本文档详细描述了一个基于Spring Cloud Gateway的微服务网关及Admin服务的实现。网关通过定义路由规则&#xff0c;利用负载均衡将请求转发至不同的后端服务&#xff0c;并集成了Token验证过滤器以确保API的安全访问&#xff0c;同时支持白名单路…