Linux ----------------------- 文本处理工具

(一)绪论

        awk、grep、sed和cut 是Linux 操作文本的四大利器,合称文本四大金刚,也是必须掌握的Linux 命令之一。这四个工具的功能各有侧重:

awk:功能最强大,用于处理和格式化文本,可以进行复杂的文本处理和数据提取,通常用于处理结构化数据,例如 CSV 文件。

grep:主要用于在文本中查找和匹配特定字符串或模式,是一个文本搜索工具。

sed:用于编辑匹配到的文本,可以进行替换、删除、插入等操作,是一个文本编辑工具。

cut:用于从文本中提取指定的字段或列,通常用于文本列的分割。

        接下来我们详细分析这四个命令。

(二)awk

       awk是一种强大的文本分析工具,主要用于在linux/unix 下对文本和数据进行处理。
对数据进行分析、统计并生成报表,比如网站的访问量,访问的IP 量等等。
        awk是一种编程语言,awk可以定义变量、运算符,使用流程控制语句进行深度加工
与分析。awk其名称得自于它的创始人.Alfred Aho 、Peter Weinberger 和 Brian Kernighan
姓氏的首个字母。
        awk的处理文本和数据的方式把文件逐行读入,以空格为默认分隔符将每行切片。
切片的部分再进行各种分析处理。。

语法

awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)

即 awk 选项参数  ‘命令部分' 文件名,注意:引用shell变量需要双引号引起。

选项参数说明:

  • --F  : 指定文件拆分分隔符,如果不写默认是空格
  • -v    : 赋值一个用户定义变量,将外部变量传递给awk
  • -f     :赋值一个用户定义变量,将外部变量传递给awk

AWK内置变量

变量名含义
$n指整条变量,当前记录的第n个字段。比如n为1 表示第一个字段
$NF表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行 列的总数
$0这个变量包含执行过程中当前行的文本内容
ARGC命令行参数的个数
ARGIND命令行中当前文件的位置
ARGV包含命令行参数的数组
CONVFMT

数字转换格式(默认值为%.6g)

ENVIRON环境变量关联数组
ERRNO最后一个系统错误的描述
FIELDWIDTHS字段宽度列表(用空格键分割)
FILENAME当前输入文件的名
NR表示记录数,在执行过程中对应当前的行号
FNR同NR;但相对于当前文件
FS字段分隔符(默认是任何空格)
IGNORECASE如果真,进行忽略大小写的匹配
NF表示字段数,在执行过程中对应当前的字段数。print $NF 打印一行中最后一个字段
OFMT数字的输出格式(默认值为%.6g)
OFS输出字段分隔符(默认是一个空格)
ORS输出记录分隔符(默认是一个换行符)
RS记录分隔符(默认是一个换行符)
RSTART由 match函数所匹配的字符串的第一个位置
SUBSEP数字下标分割符(默认是34)

实例:

格式化输出 'print'和'printf’

print函数  类似echo,它是换行输出

printf函数 类似echo-n,它不换行输出,可以使用%s,%d进行占位。其中%s表示字符类型,%d数值类型。-表示左对齐,默认右对齐。

BEGIN……END使用

BEGIN:表示在程序开始前执行。

END:表示所有文件处理完后执行。

用法:'BEGIN‘{开始处理前};{处理中};END{处理结束后}’

定义变量 -v

流程控制语句

条件语句——IF 语句

IF 条件语句语法格式如下:

if (condition)action

也可以使用花括号来执行一组操作:

if (condition)
{action-1action-1..action-n
}

 

条件语句——IF - ELSE 语句

IF - ELSE 条件语句语法格式如下:

if (condition)action-1
elseaction-2

在条件语句 condition 为 true 时执行 action-1,否则执行 action-2。

 

条件语句——IF - ELSE - IF

IF - ELSE 条件语句语法格式如下:

if (condition)action-1
else if (condition1)action-2
……

else if (conditionn) action-n

else  action-m

 

循环——For

For 循环的语法如下:

for (initialisation; condition; increment/decrement)action

        for 语句首先执行初始化动作( initialisation ),然后再检查条件( condition )。如果条件为真,则执行动作( action ),然后执行递增( increment )或者递减( decrement )操作。只要条件为 true 循环就会一直执行。每次循环结束都会进条件检查,若条件为 false 则结束循环。

下面的例子使用 For 循环输出数字 1 至 5:

$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'

 

循环——While

While 循环的语法如下:

while (condition)action

        While 循环首先检查条件 condition 是否为 true ,若条件为 true 则执行动作 action。此过程一直重复直到条件 condition 为 flase 才停止。

下面是使用 While 循环输出数字 1 到 5 的例子:

$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'

Break

break 用以结束循环:

在下面的示例子中,当计算的和大于 50 的时候使用 break 结束循环:

 

 

Continue

Continue 语句用于在循环体内部结束本次循环,从而直接进入下一次循环迭代。

下面的例子输出 1 到16 之间的偶数:

 

 

Exit

Exit 用于结束脚本程序的执行。

该函数接受一个整数作为参数表示 AWK 进程结束状态。 如果没有提供该参数,其默认状态为 0。

下面例子中当和大于 50 时结束 AWK 程序。

awk 'BEGIN {sum = 0; for (i = 0; i < 20; ++i) {sum += i; if (sum > 50) exit(10); else print "Sum =", sum } 
}'

让我们检查一下脚本执行后的返回状态:

$ echo $?

执行上面的命令可以得到如下的结果:

 

(三)grep  

        grep是一种强大的文本搜索工具,用于关键字进行过滤,并把匹配到的行进行打印,特别的是他在一个或多个文件中搜索满足模式的文本行。

语法形式:

grep   [选项]  '关键词' 文件名

常见的grep的选项参数:
选项作用
-c只输出匹配到的行数
-i不区分大小写(只适用于单字符)
-v显示不包匹配文本的所有行
-w按单词搜索
-o打印匹配关键字
-A显示匹配行即后面多少行
-B显示匹配行即前面多少行
-C显示匹配行即前后多少行
-e使用正则匹配
-E使用扩展正则匹配
-h查询多文件时不显示文件名
-n显示匹配行及行号
-s不显示不存在或无匹配文本的错误信息
^key以关键字开头
^$匹配空行

 (四)cut

         cut:剪切,切割,是一个强大文本处理工具,它是将文本按列进行划分的文本处理。cut命令逐行读入文本,按列划分字段并进行提取、输出等操作。

语法形式:

cut [选项] 文件名

常见的选项参数:

参数作用
-f  提取范围列号,获取第几列
-c 以字符为例以字符为单位进行分割
-b 提取范围以字节为单位进行分割,这些字节位置将忽略多字节字符边界,除非其指定-n标志
-d 自定义分隔符自定义分隔符,默认为制表符
-n与“-b"选项连用,不分隔多字节字符

提取范围说明:

提取范围说明
n-提取指定第n列或字符或字节后面所有数据
n-m提取指定第n列或字符或字节到第m列字符或字节中间所有数据
-m提取指定第m列或字符或字节前面所有数据
n1,n2……提取枚举列的所有数据

示范:

(五)sed

        sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段,技正则匹配文本内容,灵活方便,特别适合于大文件的
编辑。
        sed工作原理:sed会读取每一行数据到模式空间中,判断当前行是否符合模式匹配要求,符合要求就会执行sed程序命令,否则不会执行sed程序命令,如果不写匹配模式,那么每一行都会执行sed程序命令。

sed的使用语法:

sed [选项参数] [模式匹配|sed程序命令]         [文件名]

sed的常用选项:

选项作用
-r使用扩展正则表达式
-e告诉sed将下一个参数解释为一个sd指令,只有当命令行上给出多个sed指令时才需要使用-e
-f后跟保存sed指令的文件
-i直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-n取消默认输出,sed默认会输出所有文本内容,使用-n 参数后只显示处理过的行

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

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

相关文章

Docker 安装ELK7.7.1

(注&#xff1a;在安装之前&#xff0c;本方法必须安装jdk1.8以上版本) (注&#xff1a;如果在虚拟机下用可以直接按方法走即可&#xff0c;如果是想进行备份后在别的机器上进行相关操作&#xff0c;必须把所有带有172.17.0.6、192.168.8.166:9200和端口号都改成你自己的方可使…

c++ 实现 AVL 树

AVL 树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家 G.M.Adelson-Velskii 和 E.M.Landis 在 1962 年发明了一…

python 深度学习 解决遇到的报错问题9

本篇继python 深度学习 解决遇到的报错问题8-CSDN博客 目录 一、can only concatenate str (not "int") to str 二、cant convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, in…

数据中心系统解决方案

设计思路 系统设计过程中充分考虑各个子系统的信息共享要求&#xff0c;对各子系统进行结构化和标准化设计&#xff0c;通过系统间的各种联动方式将其整合成一个有机的整体&#xff0c;使之成为一套整体的、全方位的数据中心大楼综合管理系统&#xff0c;达到人防、物防和技防…

【vscode输出中文乱码】

vscode输出中文乱码为一个个的问号。 这个链接亲测有用 win11对应的界面在这里&#xff1a;

在PyCharm中直接启动mitmproxy并自动打开关闭系统代理

前言 在前面的文章中&#xff0c;有几篇是介绍mitmproxy 的。 这个mitmproxy 的确是个捕获数据的好工具&#xff0c;但在运行时候需要在命令行启动&#xff0c;这是很令人苦恼的。 之前也尝试过脱离命令行去启动mitmproxy&#xff0c;在Python中启动mitmproxy&#xff0c;脱离…

网络编程套接字(二)

目录 简单的TCP网络程序服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求单执行流服务器的弊端 多进程版TCP网络程序捕捉SIGCHLD信号让孙子进程提供服务多线程版的TCP网络程序客户端创建套接字客户端链接服务器客户端发起请求 线程池版的TCP网络程序 简单的T…

【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation

【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation 文章目录 【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation1. 来源2. 介绍3. 前置工作3.1 序列推荐的目标3.2 数据增强策略3.3 序列推荐的不变对比学习 4. 方法介绍4…

ELK + kafka 日志方案

概述 本文介绍使用ELK&#xff08;elasticsearch、logstash、kibana&#xff09;  kafka来搭建一个日志系统。主要演示使用spring aop进行日志收集&#xff0c;然后通过kafka将日志发送给logstash&#xff0c;logstash再将日志写入elasticsearch&#xff0c;这样elasticsearc…

如何在校园跑腿系统小程序中构建稳健的订单处理与分配系统?

1. 数据库设计 首先&#xff0c;设计订单数据结构。使用数据库&#xff08;例如MySQL、MongoDB等&#xff09;&#xff0c;创建订单表以存储订单相关信息&#xff0c;包括订单ID、用户信息、交付地址、订单状态等。 CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMAR…

内存池设计实现

1.设计原理 1.内存池实际就是预先分配不同大小的内存块, 然如果需要调用的时候, 直接把这个块的指针返回. 图中, 就是内存池划分. 2.通过一个链表, 将这些分配的内存块串联起来, 每一块最头部都记录这这个块的信息 3.分配的时候, 会遍历一遍链表, 找到is_used未被置1, pool…

相机存储卡被格式化了怎么恢复?数据恢复办法分享!

随着时代的发展&#xff0c;相机被越来越多的用户所使用&#xff0c;这也意味着更多的用户面临着相机数据丢失的问题&#xff0c;很多用户在使用相机的过程中&#xff0c;都出现过不小心格式化相机存储卡的情况&#xff0c;里面的数据也将一并消失&#xff0c;相机存储卡被格式…

[iOS开发]iOS中TabBar中间按钮凸起的实现

在日常使用app的过程中&#xff0c;经常能看到人家实现了底部分栏控制器的中间按钮凸起的效果&#xff0c;那么这是怎么实现的呢&#xff1f; 效果演示&#xff1a; 实现原理&#xff1a; 创建按钮 创建一个UITabBar的子类&#xff0c;重写它的layoutSubviews方法&#xff1…

Global-aware siamese network for change detection on remote sensing images

遥感图像中的变化检测是以有效的方式识别观测变化的最重要的技术选择之一。CD具有广泛的应用&#xff0c;如土地利用调查、城市规划、环境监测和灾害测绘。然而&#xff0c;频繁出现的类不平衡问题给变化检测应用带来了巨大的挑战。为了解决这个问题&#xff0c;我们开发了一种…

数字化时代,数据仓库是什么?有什么用?

在激烈的市场竞争和全新的数字经济共同作用下&#xff0c;数字化转型成为了大多数企业的共识&#xff0c;也是获取数字经济的最佳方式。在整个数据价值生产链路中&#xff0c;数据仓库的主要作用就是中心化分发&#xff0c;将原始数据与数据价值挖掘活动隔离。 所有的原始数据…

基于 LangChain 构建 LLM 应用程序设计与实践

▼最近直播超级多&#xff0c;预约保你有收获 近期直播&#xff1a;《基 LangChain大模型架构案例实践》 —1— LangChain 是什么&#xff1f; LangChain 和 Semantic Kernel 是当前比较受欢迎的两款 LLM 应用开发框架。 LangChain 作为一个大语言模型应用开发框架&#xff0c;…

SpringBoot 将 jar 包和 lib 依赖分离,dockerfile 构建镜像

前言 Spring Boot 是一个非常流行的 Java 开发框架&#xff0c;它提供了很多便利的功能&#xff0c;例如自动配置、快速开发等等。 在使用 Spring Boot 进行开发时&#xff0c;我们通常会使用 Maven 或 Gradle 进行项目构建。 本文将为您介绍如何使用 Maven 将 Spring Boot …

如何从站长的角度选择高防CDN以节省成本

在当今的数字化世界中&#xff0c;网站站长需要面对越来越复杂的网络安全威胁&#xff0c;如DDoS攻击、恶意爬虫和恶意请求等。为了保护网站的可用性和数据安全&#xff0c;站长通常会寻求使用高防CDN&#xff08;内容分发网络&#xff09;。然而&#xff0c;如何在选择高防CDN…

基于Jaccard相似度的推荐算法---示例

目录 数据展示推荐算法的分类基于相似度基于流行度/上下文/社交网络 Jaccard相似度分析数据的特点可以考虑的方法计算方法优缺点计算用户之间的Jaccard相似度获取与给定最相似的10个用户对1713353的用户推荐10本书 数据展示 import pandas as pd import numpy as np# 读取CSV文…

面试梳理-Redis01

目录 开场白-追命3连 使用场景 01缓存穿透场景与方案 02布隆过滤器 03缓存击穿场景与方案 04缓存雪崩场景与方案 开场白-追命3连 看你项目中有说用到Redis&#xff0c;都是哪些场景使用了Redis呢&#xff1f; 如果发生了缓存穿透、击穿、雪崩如何应对呢&#xff1f;缓存…