Linux三剑客-awk

一、什么是awk

awk 是一个强大的文本处理工具,它在 Unix 和类 Unix 系统中广泛使用。awk 可以处理文本文件,提取信息,进行模式匹配和文本替换等操作。

二、awk的语法

1.基本语法

awk [options] 'pattern { action }' file
选项参数说明:
  • options:是一些选项,用于控制 awk 的行为。
  • pattern:指定一个条件,只有当这个条件为真时,awk 才会执行后面的 action
  • action:当 pattern 条件满足时,awk 执行的一系列命令。
  • file:要处理的文件。

(1)options 参数说明:

  • -F <分隔符>--field-separator=<分隔符>: 指定输入字段的分隔符,默认是空格。使用这个选项可以指定不同于默认分隔符的字段分隔符。

  • -v <变量名>=<值>: 设置 awk 内部的变量值。可以使用该选项将外部值传递给 awk 脚本中的变量。

  • -f <脚本文件>: 指定一个包含 awk 脚本的文件。这样可以在文件中编写较大的 awk 脚本,然后通过 -f 选项将其加载。

  • -V--version: 显示 awk 的版本信息。

  • -h--help: 显示 awk 的帮助信息,包括选项和用法示例。

(2)内置变量

  • $1, $2, ...:当前行的第1、2、...个字段。
  • $0:所有行
  • NF:当前行的字段总数。
  • NR:当前处理的是第几行。
  • FS:字段分隔符,默认为空格或制表符。
  • RS:记录分隔符,默认为换行符。

2.基本用法

    (1)打印特定字段

awk '{print $1}' file.txt

打印 file.txt 文件中每一行的第一个字段。

    (2)打印特定行

awk 'NR==5' file.txt

只打印 file.txt 文件的第5行。

    (3)基于条件打印

awk '$1 > 10' file.txt

打印 file.txt 中第一个字段大于10的所有行。

3.使用字段和变量

    (1)字段赋值

awk '{ $1 = $1 + 1 }1' file.txt

将每一行的第一个字段值增加1。

    (2)使用变量

awk '{ sum += $1 } END { print sum }' file.txt

计算 file.txt 中所有行的第一个字段的总和,并在处理完所有行后打印出来。

4.模式和动作

  (1)模式匹配

awk '/pattern/ { print $0 }' file.txt

打印包含 "pattern" 的所有行。

    (2)多个模式

awk '/start/,/end/' file.txt

打印从包含 "start" 的行到包含 "end" 的行之间的所有行。

5.字符串处理

    (1)字符串替换

awk '{gsub("old", "new", $0); print}' file.txt

file.txt 中每一行的 "old" 替换为 "new" 并打印。

    (2)字段分割

awk -F':' '{print $1}' file.txt

使用冒号作为字段分隔符,并打印每一行的第一个字段。

6.高级用法

    (1)数组

awk '{arr[$1]++} END {for (i in arr) print i, arr[i]}' file.txt

统计 file.txt 中每一行的第一个字段出现的次数,并打印出来。

    (2)函数

awk '{print sqrt($1)}' file.txt

计算 file.txt 中每一行的第一个字段的平方根并打印。

    (3)嵌套 awk

awk '{print; print $0}' file.txt | awk 'NR%2==1'

打印 file.txt 的每一行,然后再次打印每一行,但只打印奇数行。

    (4)使用外部命令

awk '{system("echo " $1)}' file.txt

file.txt 中每一行的第一个字段执行 echo 命令。

    (5)多文件处理

awk 'NR==FNR {a[$1]=$2; next} $1 in a {print $0, a[$1]}' file1.txt file2.txt

7.awk运行处理规则的执行流程

(1) BEGIN{ } : 最开始执行

(2)/ / : 正则

(3){ } : 循环体

(4)END{ } :

最后执行 这里面最少有一个,最多有四个!

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

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

相关文章

vue3实现自定义导航菜单

一、创建项目 1. 打开HBuilder X 图1 2. 新建一个空项目 文件->新建->项目->uni-app 填写项目名称&#xff1a;vue3demo 选择项目存放目录&#xff1a;D:/HBuilderProjects 一定要注意vue的版本&#xff0c;当前选择的版本为vue3 图2 点击“创建”之后进入项目界面 图…

BASLER工业相机维修不能触发拍照如何处理解决这个问题

BASLER工业相机维修不能触发拍照如何处理解决这个问题&#xff1f;最近遇到挺多工业相机维修咨询这个不能触发拍照的案例&#xff0c;所以今天优米佳维修的技术就抽空整理了这篇关于BASLER相机不能触发拍照的处理方法分享给大家。 当碰到巴斯勒工业相机不能触发拍照的问题&…

深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接

1.前言 从一个高级语言到可执行程序&#xff0c;要经过预处理、编译&#xff0c;汇编和链接四个过程。大家可以思考下&#xff0c;为什么要有这样的过程&#xff1f; 我们学习计算机之处&#xff0c;就应该了解到&#xff0c;计算机能够识别的只有二进制语言&#xff08;这是…

HTTP代理是什么,主要用来干嘛?

在探讨互联网通信和数据传输的广阔领域中&#xff0c;HTTP代理作为一个重要而广泛使用的工具&#xff0c;扮演着不可或缺的角色。本文将深入浅出地介绍HTTP代理的基本概念、工作原理及其主要应用场景。 一、HTTP代理的基本概念 HTTP代理&#xff0c;简而言之&#xff0c;是一…

“不可能三角”的“宿敌”,AI辅助技术撕开“第一道口子”

尽管&#xff0c;打破看得好病、看得起病和看得上病这个“不可能三角”&#xff0c;无法一蹴而就&#xff0c;但是在人工智能浪潮的推动下&#xff0c;“不可能”也在逐渐向“可能”转变。 近日&#xff0c;国家医保局在相关新闻发布会上表示&#xff0c;目前已编制发布17批立…

【Linux】剧幕中的灵魂更迭:探索Shell下的程序替换

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出&#xff0c;万山无阻 目录 &#x1f4d6;一、进程程序替换 1.替换的演示 ❓替换与执行流 ❓程序替换≠进程替换 2.替换的原理 …

【MySQL】数据库开发技术:内外连接与表的索引穿透深度解析

前言:本节内容主要讲解表的内连和外连以及索引的一部分。 注意&#xff1a; 索引是很重要的知识点。务必学习&#xff01;&#xff01;本节将会主要谈一谈什么是索引&#xff0c;如何理解索引。 以及怎么理解MySQL与磁盘的关系。 下面友友们开始学习吧&#xff01; ps&#xff…

Matlab Simulink HDL Coder开发流程(三)— 验证从Simulink模型生成的HDL代码

验证从Simulink模型生成的HDL代码 一、什么是HDL Test Bench&#xff08;测试台&#xff09;二、简单的计数器模型三、验证方法四、生成HDL Test Bench生成VHDL Test Bench生成Verilog Test Bench代码 五、查看HDL Test Bench文件六、运行仿真和验证生成的HDL代码七、在目标设备…

设计模式:11、迭代器模式(游标)

目录 0、定义 1、迭代器模式的四种角色 2、迭代器模式的UML类图 3、示例代码 4、迭代器的next()方法与集合的get(int index)方法的效率对比&#xff08;LinkedList为例&#xff09; 0、定义 提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不需要暴露该对象…

基于SpringBoot的“招聘信息管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“招聘信息管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图 企业招聘界面…

Linux高阶——1123—服务器基础服务器设备服务器基础能力

目录 1、服务器基础 1、服务器基本概述 2、服务器设计之初解决的问题 网络穿透 网络数据设备间的收发 3、服务器的类型C/S、B/S 2、服务器设备 将自己的服务器软件部署上线 3、代理服务器负载均衡&#xff0c;以及地址绑定方式 4、服务器的基础能力 1、服务器基础 1…

探索 Python 任务自动化的新境界:Invoke 库揭秘

文章目录 探索 Python 任务自动化的新境界&#xff1a;Invoke 库揭秘背景&#xff1a;为何选择 Invoke&#xff1f;什么是 Invoke&#xff1f;如何安装 Invoke&#xff1f;5个简单的库函数使用方法1. 定义任务2. 带参数的任务3. 运行 Shell 命令4. 任务参数化5. 列出任务 场景应…

docker部署nginx,并配置SSL证书

、拉取nginx镜像 docker pull nginx:latest 在此过程中会遇到网络的问题&#xff0c;导致镜像无法下载&#xff0c;这时候需要在服务器中配置下国内的镜像地址。下面包含近期最新的国内镜像&#xff0c;截至2024年11月27日&#xff1a; "https://<你的阿里云账号ID&…

使用NAS开启无纸化办公,Docker部署开源文档管理系统『Paperless-ngx』

使用NAS开启无纸化办公&#xff0c;Docker部署开源文档管理系统『Paperless-ngx』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 对于文案类的办公场景来说&#xff0c;手头堆放最多的可能就是各种文档文件&#xff0c;以及各种用过的打印废纸。 这么多年来&#xff0c;不管是领…

ES 基本使用与二次封装

概述 基本了解 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了对海量数据的快速全文搜索、结构化搜索和分析功能&#xff0c;是目前流行的大数据处理工具之一。主要特点即高效搜索、分布式存储、拓展性强 核心功能 全文搜索:…

矩阵的拼接

矩阵的拼接分为横向拼接和纵向拼接 注意&#xff1a;横向拼接要求两矩阵行数相同&#xff0c;纵向拼接要求两矩阵列数相同 h o r z c a t horzcat horzcat和 v e r t c a t vertcat vertcat函数 h o r z c a t ( a , b ) horzcat(a,b) horzcat(a,b)将 a a a和 b b b横向拼接&a…

【Qt】重写QComboBox下拉展示多列数据

需求 点击QComboBox时&#xff0c;下拉列表以多行多列的表格展示出来。 实现 直接上代码&#xff1a; #include <QComboBox> #include <QTableWidget> #include <QVBoxLayout> #include <QWidget> #include <QEvent> #include <QMouseEve…

七牛云AIGC内容安全方案助力企业合规创新

随着人工智能生成内容(AIGC)技术的飞速发展,内容审核的难度也随之急剧上升。在传统审核场景中,涉及色情、政治、恐怖主义等内容的标准相对清晰明确,但在AIGC的应用场景中,这些界限变得模糊且难以界定。用户可能通过交互性引导AI生成违规内容,为审核工作带来了前所未有的不可预测…

告别 Kafka,拥抱 Databend:构建高效低成本的用户行为分析体系

用户行为数据埋点指标是数据仓库中不可或缺的重要数据源之一&#xff0c;同时也是企业最宝贵的资产之一。通常情况下&#xff0c;用户行为数据分析包含两大数据源&#xff1a;用户行为分析日志和上游关系型数据库&#xff08;如 MySQL&#xff09;。基于这些数据&#xff0c;企…

数据结构 (8)线性表的应用——一元多项式的表示及应用

一、一元多项式的定义 一元多项式是代数学研究的基本对象之一&#xff0c;可以表示为&#xff1a; P_n(x) p_0 p_1x p_2xn 其中&#xff0c;p_0, p_1, ..., p_n 是数域 F 中的数&#xff0c;n 是非负整数&#xff0c;x 是变量。 二、一元多项式的线性表表示 在计算机中&…