Linux CentOS7 awk的反转功能

news2024/12/22 5:45:21

处理文本文件,经常会遇到反向输出的要求。

可用命令rev对待处理的文件或标准输入快速完成。

可用命令tac对文件快速完成反向查看。

而对行中字符串(单词)可借助其他命令达到反向输出的目标。

我们在文章《Linux CentOS7sed的替换及逆转功能》讨论了sed流编辑器对此三类反转要求的处理。

作为文本文件处理的利器,awk处理此类问题也是驾轻就熟。本文作一初步讨论,供参考。

一、awk

1.awk工作原理

文件由众多行构成,而行又可以分隔为多个域。

设计awk模式与动作,对于待处理对象操作、处理、组合、格式化输出等!

2.awk语法

定义了大量内置变量,大大丰富了处理手段。

语法简单明确,三大块:

        BEGIN

        '模式匹配{命令执行} '

        END

3.awk模式和操作

awk命令是由模式和操作组成的:

        pattern {action} 如 awk '/root/' /etc/passwd

两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。默认情况下,每一个输入行都是一条记录,但用户可通过RS变量指定不同的分隔符进行分隔。

模式

模式可以是以下任意一个:

/正则表达式/:  使用通配符的扩展集。

关系表达式:    可以用下面运算符表中的关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。

模式匹配表达式:用运算符~(匹配)和~!(不匹配)。

模式,模式:  指定一个行的范围。该语法不能包括BEGIN和END模式。

BEGIN:  让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。

END:    让用户在最后一条输入记录被读取之后发生的动作。

操作

操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四部份:

        变量或数组赋值

        输出命令

        内置函数

        控制流命令

二、字符串→字符

对于字符串按字符进行反向输出,常用命令是rev

        echo 12345|rev

我们在文章《Linux centos7 bash中字符串反向输出》讨论了字符串如何反向输出。

而作为操作文本文件功能强大的awk命令,处理此问题也是非常简单的。主要是利用子串截取命令substr($0,i,1),从需处理的字符串中从左向右一次截取一个字符,放入新字符串,再打印输出,就达到反向输出效果。

1.字符串截取

代码

        echo ABCD | awk '{for(i=1;i<=length;i++) {line=substr($0,i,1) line}} END{print line}'

诠释

1)substr($i,0,1)表示取当前字符从索引i开始,取当前位

2)length 为当前字符串的长度

3)line=substr($i,0,1) line 将三个值分别保存在内存栈中

>substr($3,6,2)  表示从第三个字段里的第六个字符开始。截取两个字符结束

>substr($3,6)     表示从第三个字段里的第六个字符开始,直到结束

2.FS分隔符设置

对于字符串,我们可以认为是用''分隔的文本数据,重新设置内置分隔符FS,再反向循环,以字符串格式化输出

        echo "helloworld"|awk 'BEGIN{FS = ""}{for(i = NF; i >= 1; i--) {printf("%s", $i)}{printf("\n")}}'

        dlrowolleh    ## 达到逆向输出效果

3.OFS分隔符设置

通过设置内置变量FSOFSORS,达到利用tac反向输出行

        echo abcde|awk '$1=$1' FS= OFS='\n'|tac|awk '$1=$1' ORS="";echo

其中 最后的echo是添加一个换行

三、行→单词

按域号或列号(NF)递减输出

1.for按NF反向输出

一次循环一个字符串,共循环NF次。

        echo "5e 4d 3c 2b 1a"|awk '{for(i=NF;i>1;i--)printf ("%s ",$i);print $1}'

解析

这是最常用的命令,利用NF的降序输出,把最后一个域作为第一个输出,然后自减,最后输出$1,这里要注意的地方是printf,不能用print,因为print默认的ORS是换行,最后用print $1单独输出,既换行,又不会多个空格。

2.for按NF/2反向输出

在反向输出时,先对调左右字符串,仅循环NF/2次

        echo "4d 3c 2b 1a"|awk '{for(i=1;i<=NF/2;i++){t=$i;$i=$(NF+1-i);$(NF+1-i)=t}}1'

这是效率最高的一种办法,非常科学的算法,相当于把$1和$4对换,$2和$3对换。

for(i=1;i<=2;i++){t=$1;$1=$4;$4=t}

for(i=2;i<=2;i++){t=$2;$2=$3;$3=t}

这样就完成了$1和$4,$2和$3的对调

3.组合命令xargs和tac反向输出

        echo "I love linux and windows"|xargs -n1|tac|awk '$1=$1' ORS=" ";echo

四、文件→行

按行号NR递减输出

1.for循环

        awk '{line[NR]=$0}END{for(i=NR;i>0;i--)print line[i]}' passwd1

此方法利用数组功能,与while循环同样思路。

2.while循环

        awk '{line[NR]=$0};END{i=NR;while(i>0){print line[i];i=i-1}}' passwd1

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

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

相关文章

手写Mybatis:第13章-通过注解配置执行SQL语句

文章目录 一、目标&#xff1a;注解配置执行SQL二、设计&#xff1a;注解配置执行SQL三、实现&#xff1a;注解配置执行SQL3.1 工程结构3.2 注解配置执行SQL类图3.3 脚本语言驱动器3.3.1 脚本语言驱动器接口3.3.2 XML语言驱动器 3.4 注解配置构建器3.4.1 定义增删改查注解3.4.2…

Apple Watch 9或使用粘结剂喷射金属3D打印生产表壳

包括路透社在内的众多报道表明&#xff0c;苹果公司目前正在测试用于批量生产Apple Watch Series 9表壳的粘结剂喷射金属3D打印技术&#xff0c;该产品将于9月12日发布。报告称&#xff0c;该生产技术将不再需要将金属部件切割成产品形状&#xff0c;从而减少了产品制造所需的时…

股票交易与先胜而后战

胜在敌败在己&#xff0c;出自《孙子兵法》形篇。 孙子曰&#xff1a;昔之善战者&#xff0c;先为不可胜&#xff0c;以待敌之可胜。不可胜在己&#xff0c;可胜在敌。故善战者&#xff0c;能为不可胜&#xff0c;不能使敌之可胜。故曰&#xff1a;胜可知而不可为。 以前的文章…

接口自动化测试系列-登陆态问题方案

cookie实例 session requests.session()#验证码&#xff0c;我们测试环境用的万能验证码validate_code 1234# 获取登录认证SID#url地址url_login f"http://ops-web-{env}/login.jsp"#获取cookie,并转换成json格式sid requests.get(urlurl_login).cookies.get_dic…

【MySQL】6、MySQL主从复制与读写分离

6.NULL值 select length(null),length(),length(123);null 为空值&#xff0c;但也会占用空间&#xff1b;NULL不会被统计记录不占用空间&#xff0c;但会被统计记录什么是读写分离 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT…

贷款公司如何精准获客,大数据获客

近年来&#xff0c;贷款中介机构在金融服务领域发挥着越来越重要的作用。随着时代的发展&#xff0c;贷款中介机构不仅是贷款服务的提供者&#xff0c;也是能够帮助客户更准确获取客户的服务提供者。 为此&#xff0c;贷款中介机构应把握以下几个方面。 首先&#xff0c;贷款…

自动化与人工智能:‘爱校对’在政府网站巡检中的应用与局限性

在当今数字化时代&#xff0c;自动化和人工智能技术正逐渐渗透到各个领域&#xff0c;政府网站巡检也不例外。"爱校对"等自动化文本校对工具在政府网站巡检中具有许多应用&#xff0c;但同时也存在一些局限性。 应用方面&#xff1a;提高效率&#xff1a; 自动化文本…

Proxifier配置两次代理

proxifier配置两次代理。以前只会配置一次代理&#xff0c;然后在某个环境中&#xff0c;需要进行多级跳转&#xff0c;先登录跳板机A机器&#xff0c;然后从A机器跳转到B机器&#xff0c;网址ip1需要通过机器B的代理访问。 代理方式&#xff1a;配置两下就行了&#xff0c;如…

LeetCode 2511 最多可以摧毁的敌人城堡数目

LeetCode 2511 最多可以摧毁的敌人城堡数目 力扣题目链接&#xff1a;力扣题目链接 给你一个长度为 n &#xff0c;下标从 0 开始的整数数组 forts &#xff0c;表示一些城堡。forts[i] 可以是 -1 &#xff0c;0 或者 1 &#xff0c;其中&#xff1a; -1 表示第 i 个位置 没…

“一个都不能死”在线小游戏源代码

这款名为”一个都不能死”的网页在线小游戏是一款自适应PC和手机的网页游戏。你只需要准备一台服务器或主机&#xff0c;将游戏文件解压并上传到服务器上&#xff0c;就可以开始游戏了。 如果需要进行一些文字内容的修改&#xff0c;你可以在js/main.js文件中进行相应的修改。…

HDFS 集群动态节点管理

目录 一、动态扩容、节点上线 1.1 背景 1.2 扩容步骤 1.2.1 新机器基础环境准备 1.2.2 Hadoop 配置 1.2.3 手动启动 DataNode 进程 1.2.4 Web 页面查看情况 1.2.5 DataNode 负载均衡服务 二、动态缩容、节点下线 2.1 背景 2.2 缩容步骤 2.2.1 添加退役节点 …

dubbo服务管控

我们已经介绍了Dubbo在服务治理方面提供的特性&#xff0c;今天我们一起来看看Dubbo在其它方面提供的特性。同服务治理篇一样&#xff0c;本文的目的在于学会使用Dubbo在服务管控方面提供的特性&#xff0c;依旧不涉及任何实现原理。 工程结构 嗯~~ 是这样的&#xff0c;因为…

python webdriver 测试框架数据驱动json文件驱动的方式

简介&#xff1a; 数据驱动excel驱动方式,就是数据配置在excel里面&#xff0c;主程序调用的时候每次用从excel里取出的数据作为参数&#xff0c;进行操作&#xff0c; 需要掌握的地方是对excel的操作&#xff0c;要灵活的找到目标数据 测试数据.xlsx: 路径-D:\test\0627 E…

设计模式之代理模式与外观模式

目录 代理模式 简介 优缺点 角色职责 实现 运用场景 外观模式 简介 角色职责 优缺点 实现 使用场景 代理模式 简介 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时&#xff0c;访问对象不适合或者不能直接引用目标对象&#xff0c;代理对象作为…

京东搜索EE链路演进 | 京东云技术团队

导读 搜索系统中容易存在头部效应&#xff0c;中长尾的优质商品较难获得充分的展示机会&#xff0c;如何破除系统的马太效应&#xff0c;提升展示结果的丰富性与多样性&#xff0c;助力中长尾商品成长是电商平台搜索系统的一个重要课题。其中&#xff0c;搜索EE系统在保持排序…

北美电池测试标准解读:UL 1642、UL 2054、UL 2056、UL 2089 测试报告

在日常生活中人们与各类电子产品的交流和互动越来越多&#xff0c;由于电池与人们的接触日益密切&#xff0c;电池的安全性显得格外重要&#xff0c;因此越来越多商家注重保证电池的安全性&#xff0c;避免因电池安全事故带来的人身伤害和品牌名誉损失。特别是亚马逊今年开年来…

无涯教程-JavaScript - DMIN函数

描述 DMIN函数返回列表或数据库中符合您指定条件的列中的最小数字。 语法 DMIN (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的行是记录,数据的列是字段。列表的第一行包含…

动辄百万的工业数据处理软件,现在60秒就能用上

刚刚过去的周五&#xff0c;TDengine团队正式发布了新版3.1.1.0, 并上线了新的官网。虽没有发布会&#xff0c;但对涛思数据而言&#xff0c;这是一个“蓄谋已久”的动作。因为新版TDengine里包含了一个核心模块taosX&#xff0c;它具备强大的数据抓取、清洗、转换、加载(ETL)功…

金九银十,软件测试最新面试题整理(超详细~)

1、创建坐席组的功能模块&#xff0c;如何进行测试用例设计&#xff1f; 解答&#xff1a; 功能测试&#xff0c;使用等价类划分法去分析创建坐席的每个输入项的有效及无效类&#xff0c;同步考虑边界值去设计对应的测试用例&#xff1a; 先进行冒烟测试&#xff0c;正常创建…

微信小程序新版canvas2d海报绘制(教你轻松搞定)

效果 说明&#xff1a; canvas官方很早已经发声不再维护了&#xff0c;所以很多方法都已经不再适用。目前官方推荐适用canvas2d来绘制生成海报。 canvas2d来绘制海报&#xff1a; canvas2d的优点&#xff1a; 例如&#xff1a; 不需要先预下载网络图片再绘制&#xff0c;前…