awk从0学习

news2024/9/23 8:46:59

1. 入门

1.1 什么是 awk?

①Awk是一种文本处理工具,适用于处理结构化数据,例如表格数据。

②它可以读取一个或多个文本文件,并执行模式扫描和处理等指定的操作。

③基本逻辑涉及数据的提取,排序和计算。

④支持复杂的条件语句。

1.2 awk的安装和运行?
一般Linux会自带该工具

1.3基本字段解析

①指定对应字段:$

当前行:$0;

指定字段:$1 ~ $n:n代表指定字段

②当前行数,从1开始:NR

③当前记录字段个数:NF

例1:打印每行的字段数和内容awk '{print "Number of fields: " NF, "Content: " $0}' output.txt
例2:打印每行的记录号和内容awk '{print "Record number: " NR, "Content: " $0}' output.txt

1.4基本语法

读取文件并打印指定的字段

例:echo “nihao shijie” | awk '{print $2,$1}'

图片

1.5字符串

格式符由 % 字符开始,后跟一个或多个字符,用于指定输出的格式。常用的格式说明符包括:

%s:字符串

%d:十进制整数

%f:浮点数

%c:字符

%x:十六进制数

%o:八进制数

%b:二进制数

%e:科学计数法表示的浮点数

注:%s %c %d %f 都是格式替代符

%s 输出一个字符串

%d 整型输出

%c 输出一个字符

%f 输出实数,以小数形式输出

例:

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留 2 位小数。

2.基本操作

2.1打印和格式化输出

①使用print打印文本

例:打印每行的第3哥和第6个字段awk '{print $3,$6}' output.txt

②使用printf格式化输出

例:格式化输出每行的第3个和第6个字段awk '{printf "Name: %s, Score: %d\n", $3,$6}' output.txt

2.2内置变量

①FS: 分隔符,默认是空格。

例:设置字段分隔符为逗号awk 'BEGIN{FS=","} {print $1, $2}' output.txt

②OFS: 输出分隔符。

例:设置输出字段分隔符为制表符awk 'BEGIN{OFS="\t"} {print $1, $2}' output.txt
例:设置输出字段分隔符为,awk -F" " -v OFS="," '{print $1 "," $3}' output.txt

③RS:输入记录的分隔符,默认是 换行符 \n

④ORS :输出记录的分隔符,默认也是换行符 \n

例:修改记录的 输入输出分隔符awk -v RS="\n\n" -v ORS="\n\n" '{print $0}' output.txtawk -v RS=";" -v ORS="\n--\n" '{print $0}' output.txt

3.模式与动作

3.1 模式匹配(pattern)

①学习如何使用正则表达式进行模式匹配。

例:匹配包含 "error" 的行awk '/error/ {print}' logfile.txt例:匹配 以"error"开头的行awk '/^error/ {print}' logfile.txt

②学习如何使用条件表达式进行模式匹配。

例:匹配第三个字段大于50的行awk '$3 > 50 {print}' output.txt

3.2动作

①学习常见的动作,如print,if-else,for,while等。

例:使用 if-else 进行条件判断awk '{if ($3 > 50) print $1, $3; else print $1, "Fail"}' output.txt

②结合模式和动作处理更复杂的任务。

例:使用模式和动作过滤并处理数据awk '/error/ {count++} END {print "Number of errors:", count}' logfile.txt

4.进阶操作

4.1 内置函数

①学习awkd内置函数,如gsub,sub,length,substr,split等。

例:使用 gsub 替换字符串中的空格为下划线awk '{gsub(/ /, "_", $0); print}' input.txt

②练习使用这些函数进行字符串和数字的处理。

例:计算每行字符串的长度awk '{print $0, "Length:", length($0)}' input.txt
4.2 用户自定义函数

①学习如何定义和调用自定义函数。

例:定义一个函数计算平方awk 'function square(x) {return x * x} {print $1, square($1)}' input.txt

②编写一些简单的自定义函数以解决特定问题。

4.3 数组与关联数组

①学习如何使用数组和关联数组。

例:使用数组统计单词出现次数awk '{for (i=1; i<=NF; i++) word[$i]++} END {for (w in word) print w, word[w]}' input.txt

5. 实战案例展示

①提取日志文件中访问次数最多的 IP 地址:

awk '{ip[$1]++} END {for (i in ip) if (ip[i] > max) {max = ip[i]; max_ip = i} print "Most frequent IP:", max_ip, "with", max, "visits"}' access.log

②计算 CSV 文件中每列的平均值:

awk -F, '{for(i=1; i<=NF; i++) sum[i] += $i} END {for(i=1; i<=NF; i++) print "Column", i, "Average:", sum[i]/NR}' data.csv

③从文本文件中提取特定模式的行并统计出现次数:

awk '/pattern/ {count++} END {print "Pattern found:", count, "times"}' file.txt

④过滤 CSV 文件中某一列满足特定条件的行:

awk -F, '$3 > 100 {print}' data.csv

⑤合并多个 CSV 文件并计算总和:

awk -F, '{for(i=1; i<=NF; i++) sum[i] += $i} END {for(i=1; i<=NF; i++) print "Column", i, "Sum:", sum[i]}' file1.csv file2.csv
⑥按列统计文本文件中每个单词的频率:
awk '{for(i=1; i<=NF; i++) freq[$i]++} END {for(word in freq) print word, freq[word]}' text.txt

⑦处理日志文件,计算每小时的访问量:

awk '{split($4, datetime, ":"); hour=datetime[2]; count[hour]++} END {for(hour in count) print hour, count[hour]}' logfile.txt

⑧统计文本文件中最长的行及其长度:

awk '{if(length($0) > max_length) {max_length = length($0); longest_line = $0}} END {print "Longest line:", longest_line, "Length:", max_length}' text.txt

⑨计算一个 CSV 文件中某列的标准差:

awk -F, '{sum+=$3; sumsq+=$3*$3} END {print "Standard Deviation:", sqrt(sumsq/NR - (

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

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

相关文章

Leetcode 2464. 有效分割中的最少子数组数目

1.题目基本信息 1.1.题目描述 给定一个整数数组 nums。 如果要将整数数组 nums 拆分为 子数组 后是 有效的&#xff0c;则必须满足: 每个子数组的第一个和最后一个元素的最大公约数 大于 1&#xff0c;且 nums 的每个元素只属于一个子数组。 返回 nums 的 有效 子数组拆分中…

Lumos学习王佩丰Excel第十五讲:条件格式与公式

一、使用简单的条件格式 1、为特定范围的数值标记特殊颜色 条件格式-需选择设定范围&#xff08;大于/小于/介于/......&#xff09;&#xff1a; 数值会动态根据条件判断更新颜色&#xff1a; 模糊匹配&#xff0b;条件格式&#xff1a;选择包含部分文本的特殊值 2、查找重复…

linux-----进程控制

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、fork()函数 返回值&#xff1a;子进程返回0&#xff0c;父进程返回子进程的id,出错就返回-1. fork创建子进程&#xff0c;如果父子一方发生写入时&#xff0c;就会发生写实拷贝&#xff0c;操作系统就…

专业学习|动态规划(概念、模型特征、解题步骤及例题)

一、引言 &#xff08;一&#xff09;从斐波那契数列引入自底向上算法 &#xff08;1&#xff09;知识讲解 &#xff08;2&#xff09;matlap实现递归 &#xff08;3&#xff09;带有备忘录的遗传算法 &#xff08;4&#xff09;matlap实现带有备忘录的递归算法 “&#xff1…

0基础跟德姆(dom)一起学AI 数据处理和统计分析06-数据组合和缺失值处理

* 数据组合 * concat * merge * join(了解) * 缺失值处理 * apply方法详解 --- 1.DataFrame数据组合-concat连接 * 概述 * 连接是指把某行或某列追加到数据中, 数据被分成了多份可以使用连接把数据拼接起来 * 把计算的结果追加到现有数据集&#xff0c;也可以使用连…

Redis:常用命令总结

目录 1 . 前置内容 1.1 基本全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 1.2 数据结构和内部编码 2. String类型 SET GET MGET MSET INCR INCRBY DECR DECRBY INCRBYFLOAT 命令小结​编辑 内部编码 3 . Hash 哈希类型 HSET HGET HEXISTS HDEL HKEYS …

Qemu开发ARM篇-5、buildroot制作根文件系统并在qemu中进行挂载启动

文章目录 1、 buildroot源码获取2、buildroot配置3、buildroot编译4、挂载根文件系统 在上一篇 Qemu开发ARM篇-4、kernel交叉编译运行演示中&#xff0c;我们编译了kernel&#xff0c;并在qemu上进行了运行&#xff0c;但到最后&#xff0c;在挂载根文件系统时候&#xff0c;挂…

嵌入式单片机STM32开发板详细制作过程--01

大家好,今天主要给大家分享一下,单片机开发板的制作过程,原理图的制作与PCB设计,以及电子元器件采购与焊接。 第一:单片机开发板成品展示 板子正面都有各个芯片的丝印与标号,方便焊接元器件的时候,可以参考。(焊接完成之后,成品图如下) 第二:开发板原理图制作 在制…

OpenCV系列教程三:形态学、图像轮廓、直方图

文章目录 一、形态学1.1 阈值处理1.1.1 全局阈值处理1.1.2 全局阈值处理之Otsus 阈值法1.1.3 自适应阈值处理 1.2 腐蚀与膨胀1.2.1 腐蚀操作1.2.2 创建形态学卷积核1.2.3 膨胀操作 1.3 开运算和闭运算1.4 形态学梯度1.5 顶帽操作(tophat)1.6 黑帽操作&#xff08;Black Hat&…

基于JAVA+SpringBoot+Vue的社区智慧养老监护管理平台

基于JAVASpringBootVue的社区智慧养老监护管理平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1…

Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)

文章目录 二、命令列表2.1 jvm相关命令### 2.1.8 heapdump&#xff08;dump java heap, 类似 jmap 命令的 heap dump 功能&#xff09;举例1&#xff1a;假设你想生成一个只包含活动对象的堆转储文件&#xff0c;并将其保存为 /tmp/heapdump.hprof举例2&#xff1a;如果你想要进…

社区团购的创新与变革——融合开源链动 2+1 模式、AI 智能名片及 S2B2C 商城小程序

摘要&#xff1a;本文从信息流、资金流、物流角度深入分析社区团购的特点&#xff0c;探讨其如何避免传统线下中心零售的高展示成本与传统电商的高交付成本。同时&#xff0c;引入开源链动 21 模式、AI 智能名片及 S2B2C 商城小程序等创新元素&#xff0c;阐述它们为社区团购带…

MySQL---创建数据库(基于SQLyog)

目录 0.前言 1.基本认识 1.1编码集 1.2检验规则 2.库的创建和销毁 2.1指令介绍 2.2你可能会出现的问题 3.查看数据库属性 4.创建指定数据库 5.创建表操作 0.前言 之前写过一篇这个关于表的创建和销毁的操作&#xff0c;但是当时是第一次学习&#xff0c;肯定有些地方…

华为OD机试 - N个选手比赛前三名、比赛(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

【STM32】TIM定时器定时中断与定时器外部时钟的使用

TIM定时器定时中断与定时器外部时钟的使用 一、TIM定时器简介1、TIM&#xff08;Timer&#xff09;定时器2、定时器类型3、高级定时器4、通用定时器5、基本定时器6、定时中断基本结构代码编写&#xff1a;定时中断/外部时钟定时中断 7、预分频器时序8、计数器时序9、计数器无预…

手写SpringMVC

1、开发HspDispatcherServlet 2、完成客户端/浏览器可以请求控制层 目的&#xff1a;发出url请求时&#xff0c;经过前端控制器&#xff0c;找到Monster的List方法&#xff0c;把结果再打回去 3、从web.xml动态获取hspspringmvc.xml 4、完成自定义Service注解功能 目的&…

【功能详解】IoTDB 与 ThingsBoard 成功集成!

可视化工具集成1 IoTDB 实现了 ThingsBoard 的无缝集成对接&#xff0c;IoTDB 构建的工业数据存储处理-可视化呈现链路又多了一种可用、易用的工具选择。 我们的代码已贡献到 ThingsBoard 社区&#xff08;待发版&#xff09;&#xff0c;用户手册也已发布&#xff08;可点击下…

HBASE_题库详解

1、 HBase的特点是什么&#xff1f; 1&#xff09;大&#xff1a;一个表可以有数十亿行&#xff0c;上百万列 2&#xff09;无模式&#xff1a;每行都有一个可排序的主键和任意多的列&#xff0c;列可以根据需要动态的增加&#xff0c;同一张表中不同的行可以有截然不同的列 3…

浪涌抑制-功率NTC选型计算

目录&#xff1a; 一、概述 二、NTC抑制浪涌原理 三、功率NTC的介绍 四、功率NTC选型原则 1、峰值正向浪涌电流 2、阻值选取 3、正常工作的计算 一、概述 NTC热敏电阻除用于温度测量(热敏电阻温度检测-分段曲线拟合、Steinhart-Hart与查表)外&#xff0c;在电源中常用于…

word如何快速打开文档中的网址超链接?

1、鼠标放在文档中超链接上&#xff1a; 2、然后左手按住【CTRL】键&#xff0c;之后鼠标光标会变成一个手形&#xff0c; 然后右手&#xff0c;点击鼠标左键&#xff0c;即可快速使用电脑当前设置的默认浏览器打开并跳转到网址&#xff1a;