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

news2024/11/27 10:36:57

(一)绪论

        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-1
    action-1
    .
    .
    action-n
}

 

条件语句——IF - ELSE 语句

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

if (condition)
    action-1
else
    action-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.coloradmin.cn/o/1170333.html

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

相关文章

uniapp原生插件之安卓热敏打印机打印插件

插件介绍 安卓热敏打印机打印插件&#xff0c;自动授权&#xff0c;打印机连接监听&#xff0c;打印文本&#xff0c;条形码&#xff0c;二维码&#xff0c;切纸&#xff0c;打印机状态&#xff0c;打印结果查询等 插件地址 安卓热敏打印机打印插件 - DCloud 插件市场 超级…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(九):互连的带宽

如果我们从理想方波的频谱开始&#xff0c;优先衰减高频分量而不是低频分量&#xff0c;则传输信号的带宽&#xff08;重要的最高正弦波频率&#xff09;将会减小。我们让波传播的时间越长&#xff0c;高频分量的衰减就越大&#xff0c;带宽就越低。 带宽作为重要的最高正弦波频…

EASYX输出文字

在EASYX中绘制出字符串和字符 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define PI 3.14、 //…

CoT: 思路链提示促进大语言模型的多步推理

CoT 总览摘要1 引言2 Chain-of-Thought Prompting3 算术推理 &#xff08;Arithmetic Reasoning&#xff09;3.1 实验设置3.2 结果3.3 消融实验3.4 CoT的鲁棒性 4 常识推理 &#xff08;Commonsense Reasoning&#xff09;5 符号推理 &#xff08;Symbolic Reasoning&#xff0…

SLAM从入门到精通(计算点到直线的距离)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大家一开始看到这个题目的时候&#xff0c;也许比较吃惊。为什么会有这样的题目&#xff1f;但是做过slam的同学&#xff0c;应该就比较熟悉和了解…

Mysql库操作

一&#xff1a;库的操作 1&#xff1a;创建数据库 mysql> create database test1; Query OK, 1 row affected (0.00 sec)mysql> create database test2 charsetutf8;create database test2 character utf8;Query OK, 1 row affected (0.00 sec)mysql> create databa…

Linux学习笔记之二(环境变量)

Linux learning note 1、环境变量1.1、修好PATH环境变量 1、环境变量 环境变量(environment variables)即系统运行的一些环境参数。主要的环境变量有以下这些&#xff1a; PATH&#xff1a;决定了系统查找可执行文件的目录范围。HOME&#xff1a;指定当前用户的主目录路径。U…

【C++心愿便利店】No.11---C++之string语法指南

文章目录 前言一、 为什么学习string类二、标准库中的string类 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专栏&#xff1a;C 心愿便利店 &#x1f511;本章内容&#xff1a;str…

4.网络之TCP

TCP协议(传输层) 文章目录 TCP协议(传输层)1. TCP报文格式2. TCP相关机制2.1 确认应答机制2.2 超时重传机制2.3 连接管理机制&#xff08;重点&#xff09;2.3.1 三次握手2.3.2 四次挥手 2.4 滑动窗口机制2.5 流量控制机制2.6 拥塞控制机制2.7 延迟应答机制2.8 捎带应答机制 3.…

c++ | 字符串与指针的恩断情仇

我想&#xff0c;c/c中难的不是指针&#xff0c;而是其中的变化&#xff0c;尤其是思维的转变。很多东西 就是容易掉进陷阱。好在&#xff0c;你我都是善于思考的码农&#xff01; 大致情况是这样的&#xff0c;底层<–>c语言<–>c<–>应用 而数据的传输的最…

攻击域控丝滑小连招~

点击星标&#xff0c;即时接收最新推文 如果已经获得本地管理员账号或是域管理员账号&#xff0c;那么下一个目标通常是域控制器&#xff0c;对于渗透测试人员来说&#xff0c;光荣与荣耀的那一刻就是成功从域控制器提取所有的哈希值。但即使是拥有管理员权限&#xff0c;也无法…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本&#xff0c;在高版本的openssl编译中已经没有&#xff1a;“ms\do_ms.bat”这个脚本了&#xff0c;现记录下编译过程 1、准备工作 安装ActivePerl&#xff0c;安装后会自动写入环境变量&#xff0c;参照参考文章测试安装成功与否&a…

封装element-table合计行Hooks方法

背景: 在我们常做的后台管理系统中&#xff0c;经常的会遇到关于表格合计行的计算以及显示&#xff0c;如下图&#xff0c;我们采用的是element框架这一套 封装&#xff1a; 由于考虑到该需求是最常见的&#xff0c;每个中心可能都会涉及到&#xff0c;我们封装公共方法&#…

解决方案中word中分节符的使用

解决方案中必不可少的两个“符号”&#xff0c;分页符&#xff0c;分节符 有了分节符&#xff0c;可以为不同节设置不同的页眉页脚、分栏格式、纸张大小及方向、页边距、不同节间采用不同的页码序号&#xff0c;常用的功能主要是把word下一次的由原来的“竖版”&#xff0c;变…

pygame游戏编程库:初始化和显示(01/8)

一、说明 pygame是一个Python库&#xff0c;用于编写2D游戏和多媒体应用程序。它提供了一整套工具&#xff0c;可以帮助开发者创建图像、声音、动画等内容&#xff0c;并与用户进行交互。pygame还可以用于创建交互式教育软件、演示文稿、音乐应用程序等。它基于SDL库&#xff0…

线程锁、进程锁、分布式锁_Linux网络编程

线程锁 1、互斥锁&#xff1a;互斥锁首先是一个睡眠锁&#xff0c;如下图当线程C没有获取到资源时&#xff0c;线程锁会结束线程B切换到线程C。 2、自旋锁&#xff1a;而自旋锁在未获取到资源时线程C循环等待&#xff0c;尝试获取锁&#xff0c;一直占用核心。 3、读写锁:若一…

css基础之实现轮播图

原理介绍 图片轮播的原理是通过控制显示和隐藏不同的图片来实现图像的切换&#xff0c;从而创建连续播放的效果。用到的知识点有定位和定时器。 实现步骤&#xff1a; HTML 结构&#xff1a; 首先&#xff0c;需要在HTML中创建一个包含轮播图片的容器&#xff0c;通常使用 &l…

采用springboot、avue框架开发的:大型医院绩效考核系统成品源码

医院绩效考核系统全套源码&#xff08;演示自主版权医院应用案例&#xff09; 医院绩效考核系统&#xff0c;建立以医院发展目标为导向&#xff0c;以医务人员劳动价值、工作量为评价基础&#xff0c;统筹效率、质量、成本的绩效管理和绩效工资分配体系。系统支持RBRVS&#xf…

0003Java安卓程序设计-springboot基于Android的学习生活交流APP

文章目录 **摘** **要**目 录系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把学习生活交流管理与现在网络相结合&#xff0c;利用java技术建设学习生活交流APP&…

python机器学习——实现Kmeans算法

K-means算法 关于K-means算法&#xff0c;它是一种无监督学习算法&#xff0c;用于将数据集分成预定数量的簇&#xff08;clusters&#xff09;。 K-means算法比较适合用来做聚类分析&#xff0c;而不是用来预测&#xff0c;换句话来说&#xff0c;K-means算法不擅长预测 K-…