Linux CentOS7 awk的反转功能

这篇具有很好参考价值的文章主要介绍了Linux CentOS7 awk的反转功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

可用命令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 awk的反转功能,linux,运维,服务器,bash,开发语言

我们在文章《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)     表示从第三个字段里的第六个字符开始,直到结束

Linux CentOS7 awk的反转功能,linux,运维,服务器,bash,开发语言

2.FS分隔符设置

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

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

        dlrowolleh    ## 达到逆向输出效果

Linux CentOS7 awk的反转功能,linux,运维,服务器,bash,开发语言

3.OFS分隔符设置

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

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

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

Linux CentOS7 awk的反转功能,linux,运维,服务器,bash,开发语言

三、行→单词

按域号或列号(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的对调

Linux CentOS7 awk的反转功能,linux,运维,服务器,bash,开发语言

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

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

Linux CentOS7 awk的反转功能,linux,运维,服务器,bash,开发语言

四、文件→行

按行号NR递减输出

1.for循环

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

Linux CentOS7 awk的反转功能,linux,运维,服务器,bash,开发语言

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

2.while循环

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

Linux CentOS7 awk的反转功能,linux,运维,服务器,bash,开发语言文章来源地址https://www.toymoban.com/news/detail-706895.html

到了这里,关于Linux CentOS7 awk的反转功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux(centos7)下搭建Steam饥荒服务器

    下载steamcmd 解压后效果(game是后面创建的存放游戏的) 下载饥荒服务器 force_install_dir /opt/steam/game/dst是下载路径可以自定义路径 login anonymous 以匿名方式登录 app_update 343050 validate 下载/更新饥荒服务器 可以查看饥荒目录 链接libcurl-gnutls.so.4库,不然可能会报错 配置服务器相关

    2024年01月21日
    浏览(51)
  • 服务器,Linux,centos7成功安装显卡驱动(超详细)

    在某些情况下我们可能会遇到重装服务器显卡驱动的需求,比如重装操作系统之后需要安装一个显卡驱动,旧版的显卡驱动需要升级,需要换一个显卡驱动等等。 如果你需要重装服务器操作系统,请戳这里: 服务器重装centos7系统 https://blog.csdn.net/qq_51570094/article/details/124133

    2024年01月23日
    浏览(45)
  • 【Linux网络服务】Centos7搭建nfs文件共享服务器

    1.NFS介绍 2.环境准备 3.在A服务端机器安装nfs-utils和rpcbind包 4.启动rpcbind检查是否启动了rpcbind服务并监听111端口 5.配置NFS服务的配置文件,参数配置:vi /etc/exports 数据同步与数据异步的区别 数据同步:当系统从内存中向磁盘中持久化数据时,同步发送表示只有当内存中的数据

    2024年02月06日
    浏览(49)
  • 用Windows自带的Hyper搭建Linux(Centos7)服务器

    首先准备Centos7镜像:下载地址:CentOS Mirrors List   点击任意国内镜像地址进行下载 前提:cpu已经开启虚拟化,win10版本为非家庭版 安装Hyper-V:打开控制面板选择程序,选择程序和功能中的“启动或关闭Windows功能”,勾选Hyper-V后,点击确定后系统会启用并重启系统     

    2024年02月05日
    浏览(46)
  • Linux CentOS7sed的替换及逆转功能

    在各项工作中,需要大量的文本处理。有时,想把文件按行翻转一下,最后一行显示在第一行,倒数第二行显示在正数第二行,等等。这是对行的逆转要求,可以通过命令tac对文件操作,达到目的;有时,想把一行内容按单词翻转一下,最后一个单词显示第一个位置,倒数第

    2024年02月10日
    浏览(48)
  • Linux Centos7内网服务器离线升级openssh9.3

    内网服务器需要升级openssh,被折磨了一整天,觉得有必要记录一下,不然对不起这差点崩溃的一天,主要的几个难点就是不能yum一键安装,需要自己找到对应的依赖版本然后通过堡垒机上传到内网,还有就是服务器很干净,什么都没有,需要离线安装的包太多,又不知道依赖

    2024年02月16日
    浏览(37)
  • Linux(CentOS7.9)MongoDB的安装配置教程3个服务器+增量备份(带脚本)

    首先,作为前端的开发人员,使用 MongoDB 数据库 是非常常见的,接下来是在 Linux 系统下安装和配置 MongoDB 的过程。只要按照以下步骤操作,相信你一定可以顺利完成安装。 Ⅰ、安装前的简介: 1、什么是 MongoDB 数据库? MongoDB 是用 C++ 语言编写的,是一个基于分布式文件存储

    2024年04月08日
    浏览(47)
  • Linux服务器(centos7)中Word转换PDF,文档出现中文乱码或方格【亲测可用,已解决】

    提示:在centos服务器使用aspose.word转换word文件为pdf的时候只有中文乱码或则方格,但是在win服务器上使用可以正常转换。本次文章主要解决字体缺失问题 提示:word转换pdf在服务器上出现中文乱码或者方格状态(主要问题是字体缺失)。 在centos服务器使用aspose.word转换word文件

    2024年02月08日
    浏览(43)
  • centos7系统下,实现1台服务器免密登录多台服务器功能

    1:检查每台服务器是否都安装了SSH: 2:在kafka01服务器上执行:(一直按回车即可!) 3:查看kafka01的.ssh目录: id_rsa (私钥) id_rsa.pub (公钥) 4:在kafka01服务器上执行如下命令,将公钥传给kafka02服务器,实现kafka01能够免密登录kafka02: 然后中途需要我们输入kafka02的密码,

    2024年02月08日
    浏览(53)
  • Linux shell编程学习笔记46:awk命令的由来、功能、格式、选项说明、版权、版本

    在编写Linux Shell脚本的过程中,我们经常要对Linux命令执行的结果进行分析和提取,Linux也在文本分析和提取这方面提供了不少的命令。比如我们之前研究过的cut命令。 Linux shell编程学习笔记43:cut命令 https://blog.csdn.net/Purpleendurer/article/details/135730679?spm=1001.2014.3001.5501 除了cut命

    2024年04月24日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包