Linux 之 awk命令详解

Linux命令详解:巧妙使用awk命令进行文本处理

基本用法

常用功能

1. 打印指定列

2. 使用分隔符

3. 条件过滤

4. 格式化输出

高级功能

1. 使用BEGIN和END块

2. 内置变量

3. 自定义函数

实战案例

总结


Linux命令详解:巧妙使用awk命令进行文本处理

在Linux系统中,awk是一种强大的文本处理工具,尤其适用于结构化数据的处理。awk不仅仅是一个命令,更是一门小型编程语言。下面就是通俗简单地介绍:

基本用法

awk命令的基本语法如下:

awk 'pattern { action }' 文件

例如,如果我们有一个名为data.txt的文件,内容如下:

Alice 25 Developer
Bob 30 Manager
Charlie 22 Designer

我们可以使用awk命令来打印文件的所有内容:

awk '{ print }' data.txt

输出结果为:

Alice 25 Developer
Bob 30 Manager
Charlie 22 Designer

常用功能

1. 打印指定列

awk的一个常见用途是打印文件中的指定列。例如,要打印文件中的第一列(姓名):

awk '{ print \$1 }' data.txt

输出结果为:

Alice
Bob
Charlie

2. 使用分隔符

默认情况下,awk使用空格或制表符作为字段分隔符。我们可以使用-F选项来指定其他分隔符。例如,如果文件使用逗号分隔:

Alice,25,Developer
Bob,30,Manager
Charlie,22,Designer

我们可以这样处理:

awk -F ',' '{ print \$1 }' data.txt

3. 条件过滤

我们可以使用条件来过滤行。例如,要打印年龄大于25的人:

awk '\$2 > 25 { print }' data.txt

输出结果为:

Bob 30 Manager

4. 格式化输出

我们可以使用printf函数来格式化输出。例如:

awk '{ printf "Name: %s, Age: %d, Job: %s\n", \$1, \$2, \$3 }' data.txt

输出结果为:

Name: Alice, Age: 25, Job: Developer
Name: Bob, Age: 30, Job: Manager
Name: Charlie, Age: 22, Job: Designer

高级功能

1. 使用BEGIN和END块

awk提供了BEGINEND块,分别在处理文件之前和之后执行。例如:

awk 'BEGIN { print "Start" } { print } END { print "End" }' data.txt

输出结果为:

Start
Alice 25 Developer
Bob 30 Manager
Charlie 22 Designer
End

2. 内置变量

awk有许多内置变量,例如NR表示当前行号,NF表示当前行的字段数。例如:

awk '{ print "Line", NR, "has", NF, "fields" }' data.txt

输出结果为:

Line 1 has 3 fields
Line 2 has 3 fields
Line 3 has 3 fields

3. 自定义函数

我们可以在awk脚本中定义自己的函数。例如:

awk 'function square(x) { return x * x } { print \$1, square(\$2) }' data.txt

输出结果为:

Alice 625
Bob 900
Charlie 484

实战案例

假设我们有一个CSV文件employees.csv,内容如下:

Name,Age,Department,Salary
Alice,25,Development,5000
Bob,30,Management,6000
Charlie,22,Design,4000

我们想要计算所有员工的平均工资:

awk -F ',' 'NR > 1 { sum += \$4 } END { print "Average Salary:", sum / (NR - 1) }' employees.csv

输出结果为:

Average Salary: 5000

总结

awk命令是一个强大的文本处理工具,掌握其各种功能可以大大提高我们处理结构化文本数据的效率。希望这篇文章能帮助你更好地理解和使用awk命令。

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

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

相关文章

力扣 217. 存在重复元素,389. 找不同,705. 设计哈希集合,3. 无重复字符的最长子串,139. 单词拆分

217. 存在重复元素 题目 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 AC代码 class Solution { public:bool containsDuplicate(vector<int>& nums) {// …

Shell 构建flutter + Android 生成Apk

具体步骤 #shell 具体实现和说明如下: echo "build_start_apk!" echo "编译此脚本的前提条件如下:" #在Android 项目的主工程下,进入主工程文件夹,创建build-android 文件夹,在其文件夹下有build-android.sh文件,此文件就是整个文章的脚本内容(…

【MCGS学习-待更】

1、Mcgspro与mcgse区别&入门先学哪个合适&#xff1f; &#xff1f; 2、软件下载 现在官网没有找到下载链接。 这个网盘里有学习资料&#xff1a; 昆仑通态Mcgspro学习笔记&#xff08;V3.3.6&#xff09;-CSDN博客 3、基础入门资料视频&#xff08;待找&#xff09; …

谷粒商城实战笔记-36-前端基础-Vue-介绍HelloWorld

文章目录 一&#xff0c;MVVM 思想直接操作DOM的示例使用Vue和MVVM的示例MVVM与DOM操作的主要区别 二&#xff0c;Vue 简介三&#xff0c;第一个Vue项目1 新建项目2 安装依赖3 使用Vue 这一节的主要内容是演示Vue的简单使用。 一&#xff0c;MVVM 思想 M&#xff1a;即 Model…

【电路笔记】-放大器的频率响应

放大器的频率响应 文章目录 放大器的频率响应1、概述2、定义3、电容器的影响4、低频响应5、高频响应6、总结1、概述 对于任何电子电路来说,放大器的行为都会受到其输入端子上信号频率的影响。 该特性称为频率响应。 频率响应是放大器最重要的特性之一。 在放大器设计的频率范…

凭什么赚钱?

我先说一个朴素的逻辑&#xff0c;赚钱的本质是交换&#xff0c;而交换的底层逻辑是需求。那么现在赚钱的公式就出来了&#xff0c;挖掘需求&#xff0c;找到人群&#xff0c;进行兜售。 而我们普遍意义上的赚钱&#xff0c;就分为两类&#xff0c;体力和脑力。脑力是高纬度的赚…

【C++】深入理解函数重载:C语言与C++的对比

文章目录 前言1. 函数重载&#xff1a;概念与条件1.1 什么是函数重载1.2 函数重载的条件1.3 函数重载的注意点 2. 函数重载的价值2.1 书写函数名方便2.2 类中构造函数的实现2.3 模板的底层实现 3. C语言与C的对比3.1 C语言不支持函数重载的原因3.2 C支持函数重载的原因 4. Linu…

2024.7.19 作业

1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…

JAVA集合和数组转换

阿里规约 4.【强制】使用集合转数组的方法&#xff0c;必须使用集合的toArray(T[]array)&#xff0c;传入的是类型完全一样的数组&#xff0c;大小就是list.size()。 说明&#xff1a;使用toArray带参方法&#xff0c;入参分配的数组空间不够大时&#xff0c;toArray方法内部将…

机器人开源调度系统OpenTcs6-架构运行分析

系统启动 启动 Kernel&#xff1a;加载核心应用&#xff0c;初始化系统配置和状态。 启动 Plant Overview&#xff1a;加载图形用户界面&#xff0c;初始化模型和用户界面。 模型导入和配置 在 Plant Overview 中导入或创建工厂布局模型。 配置路径、位置和车辆信息。 车辆连…

C++迈向精通:STL设计机制之运算检查(含部分源码解析)

STL设计机制之支持运算检查 文章目录 STL设计机制之支持运算检查__STL_REQUIRES_LessThanComparable_STL_ERROR::__less_than_comparable_requirement_violation STL运算检查方法的特点do{...}while 的优点场景1场景2 __x __x 自己写一个运算检查 单说这个标题可能有点奇怪&am…

基于java的设计模式学习

PS &#xff1a;以作者的亲身来看&#xff0c;这东西对于初学者来说有用但不多&#xff0c;这些东西&#xff0c;更像一种经验的总结&#xff0c;在平时开发当中一般是用不到的&#xff0c;因此站在这个角度上用处不大。 1.工厂模式 1.1 简单工厂模式 我们把new 对象逻辑封装…

【VUE】v-if和v-for的优先级

v-if和v-for v-if 用来显示和隐藏元素 flag为true时&#xff0c;dom元素会被删除达到隐藏效果 <div class"boxIf" v-if"flag"></div>v-for用来进行遍历&#xff0c;可以遍历数字对象数组&#xff0c;会将整个元素遍历指定次数 <!-- 遍…

Provider(6) - Reformat和ClampBufferProvider

ReformatBufferProvider和ClampFloatBufferProvider 简介 ReformatBufferProvider就是用于转换输入和输出的数据format不一致&#xff0c;比如输入是float、输出是int32_t&#xff1b; ClampFloatBufferProvider则是将float类型的音频数据其能量限制在[-3dB&#xff0c;3dB]…

【大数据】JSON文件解析,对其文本聚类/情感分析

目录 引言 JSON&#xff08;JavaScript Object Notation&#xff09; 文本聚类K-means 基本步骤 优点 缺点 实际应用 情感分析 核心任务与应用场景 算法原理与技术 json数据集 情感分析实现 文本聚类实现 引言 JSON&#xff08;JavaScript Object Notation&#…

从系统层面认识Linux及mysql中的多表查询

为什么计算机起始时间是1970年1月1日 为什么计算机起始时间是1970年1月1日-CSDN博客https://blog.csdn.net/csdn_kou/article/details/81535452 date "%Y-%m-%d %H:%M:%S" 查看日期 sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 在数据层面 CPU不…

Nacos Derby 远程命令执行漏洞(QVD-2024-26473)

0x01 产品简介 Nacos 是一个功能强大的服务注册与发现、配置管理平台,为微服务架构和云原生应用提供了重要的基础设施支持。 0x02 漏洞概述 由于Alibaba Nacos部分版本中derby数据库默认可以未授权访问,恶意攻击者利用此漏洞可以未授权执行SQL语句,最终导致任意代码执行。…

GESP CCF C++ 八级认证真题 2024年6月

第 1 题 GESP活动期间&#xff0c;举办方从获胜者ABCDE五个人中选出三个人排成一队升国旗&#xff0c;其中A不能排在队首&#xff0c;请问 有多少种排法&#xff1f; A.24 B.48 C.32 D.12 第 2 题 7进制数235转换成3进制数是&#xff08; &#xff09;。 A. 11121 B. 11…

Ruby 循环

Ruby 循环 在编程中&#xff0c;循环是一种常用的控制结构&#xff0c;它允许我们重复执行一段代码多次。Ruby 作为一种灵活的编程语言&#xff0c;提供了多种循环方法&#xff0c;包括 while、until、for、each 和 loop 等。本文将详细介绍 Ruby 中的循环机制&#xff0c;并通…

OpenWrt安装快速入门指南

在刷新 OpenWrt 固件之前&#xff0c;建议进行以下准备&#xff1a; 1、不要急于安装&#xff0c;慢慢来。如果在安装过程中出现奇怪之处&#xff0c;请先找到答案&#xff0c;然后再继续。 2、准备好设备的精确型号&#xff0c;以便能够选择正确的OpenWrt固件。 3、手上有关…