awk数组与语法[通俗易懂]

awk数组与语法[通俗易懂]1、awk数组1.1数组结构1.2数组分类索引数组:以数字为下标关联数组:以字符串为下标1.3awk关联数组现有如下文本,格式如下:即左边是随机字母,右边是随机数字,即将相同的字母后面的数字加在一起,按字母的顺序输出以$1为下标,创建数组a[$1]=a[$1]+$2或者(a[$1]+=$2)然后配合END和for循环输出结果:for(iina):…

大家好,又见面了,我是你们的朋友全栈君。

1、awk数组

1.1 数组结构

awk数组与语法[通俗易懂] awk数组与语法[通俗易懂]

1.2 数组分类

引数组:以数字为下标

关联数组:以字符串为下标

1.3 awk关联数组

现有如下文本,格式如下:即左边是随机字母,右边是随机数字, 即将相同的字母后面的数字加在一起,按字母的顺序输出

awk数组与语法[通俗易懂]

以$1为下标,创建数组a[$1]=a[$1]+$2 或者(a[$1]+=$2)然后配合END和for循环输出结果:

awk数组与语法[通俗易懂]

for(i in a ) :循环的顺序不是按照文本内容的顺序来处理的,排序可以在命令后用sort

1.4 awk索引数组

以数字为下标的数组seq生成1-10数字,,只显示奇数行

awk数组与语法[通俗易懂]

seq生成1-10的数字,要求不显示文件的后3行

awk数组与语法[通俗易懂]

改变i的范围

1.5 awk数组实战去重

a++ 和++a

awk数组与语法[通俗易懂]

对一下文本进行去重处理 针对第二列去重

awk数组与语法[通俗易懂]

解法一:

awk数组与语法[通俗易懂]

解析:
!a[$2]++是模式(条件),命令也可写成awk ‘!
a[$2]=a[$2]+1{print $0}’ 22.txt
a[$2]++ ,“++”在后,先取值后加一
!a[$2]=a[$2]+1:是先取a[$2]的值,比较“!a[$2]”是否符合条件(条件非0),后加1
注意:此方法去重后的结果显示的是文本开头开始的所有不重复的行

解法二:

awk数组与语法[通俗易懂]

解析:
++a[$2]==1是模式(条件),也可写成a[$2]=a[$2]+1==1即只有当条件(a[$2]+1的结果)为1的时候才打印出内容
++a[$2] ,“++”在前,先加一后取值
++a[$2]==1:是先加1,后取a[$2]的值,比较“++a[$2]”是否符合条件(值为1)
注意:此方法去重后的结果显示的是文本开头开始的所有不重复的行

解法三:

awk数组与语法[通俗易懂]

解析:
注意此方法去重后的结果显示的是文本结尾开始的所有不重复的行

1.6 awk处理多个文件(数组、NR、FNR)

awk数组与语法[通俗易懂]

解析:NR==FNR处理的是第一个文件,NR!=FNR处理的是第二个文件.
注意:当两个文件NR(行数)不同的时候,需要把行数多的放前边.
解决方法:把行数多的文件放前边,行数少的文件放后边.

把输出的结果放入一个新文件new.txt中:

awk数组与语法[通俗易懂]

1.7 awk分析日志文件,统计访问网站的个数

awk数组与语法[通俗易懂]

2、awk简单语法

2.1 函数sub gsub

awk数组与语法[通俗易懂]

sub只会替换行内匹配的第一次内容;相当于sed ‘s###’
gsub 会替换行内匹配的所有内容;相当于sed ‘s###g’

awk数组与语法[通俗易懂] awk数组与语法[通俗易懂]

案例

以’|’为分隔, 现要将第二个域字母前的数字去掉,其他地方都不变, 输出为:

方法一:

awk数组与语法[通俗易懂]

方法二:

awk数组与语法[通俗易懂]

2.2 if else

awk数组与语法[通俗易懂] awk数组与语法[通俗易懂]

2.3 next用法

awk数组与语法[通俗易懂]

解析:
{print $0″ NO YES”}:此动作是默认执行的,当前边的$0~/AA/匹配,就会执行{print $0″ YES”;next}
因为action中有next,所以会跳过后边的action。
如果符合$0~/AA/则打印YES ,遇到next后,后边的动作不执行;如果不符合$0~/AA/,会执行next后边的动作;
next前边的(模式匹配),后边的就不执行,前边的不执行(模式不匹配),后边的就执行。

2.4 printf不换行输出及next用法

printf :打印后不换行

如下文本,如果 Description:之后为空,将其后一行内容并入此行。

解法一:

awk数组与语法[通俗易懂]

解析:使用正则匹配,匹配到’/^Desc.*:$/,就使用printf打印(不换行),不匹配的打印出整行。

解法二(使用ifelse实现):

awk数组与语法[通俗易懂]

解法三(使用next实现):

awk数组与语法[通俗易懂]

注:可简写成awk ‘/Desc.*:$/{printf $0;next}1’
printf.txt ## 1是pattern(模式),默认action(动作)是{print $0}

awk数组与语法[通俗易懂]

2.5 去重后计数按要求重定向到指定文件

文本如下,要求计算出每项重复的个数,然后把重复次数大于2的放入gt2.txt文件中,把重复次数小于等于2的放入le2.txt文件中

awk数组与语法[通俗易懂]

解析:{print },或括号中打印后可直接重定向到一个新文件,文件名用双引号引起来。如: {print $1 >”xin.txt”}

3、awk总结

  • NR==FNR ##不能写成NR=FNR(=在awk中是赋值的意思)
  • NR!=FNR ##NR不等于FNR
  • {a=1;a[NR]} 这样会报错:同一条命令中变量和数组名不能重复 d)printf 输出的时候不换行
  • {print },或括号中打印后可直接重定向到一个新文件,文件名用双引号引起来。如: {print $1 >”xin.txt”}
  • 当模式(条件)是0的时候,后边的动作不执行,!0的时候后边动作才执行。

原文地址:https://mp.weixin.qq.com/s/2Ic4lCBTYjxMuC8lH5IdVg

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161641.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • (更新时间)2021年3月26日 python基础知识(模块制作)[通俗易懂]

    (更新时间)2021年3月26日 python基础知识(模块制作)[通俗易懂]模块制作<1>定义自己的模块在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。比如有这样一个文件test.py,在test.py中定义了函数addtest.pydefadd(a,b):returna+b<2>调用自己定义的模块那么在其他文件中就可以先importtest,然后通过test.add(a,b)来调用了,当然也可以通过fromtestimportadd来引入main.pyimporttestr

  • excel图片链接显示为图片_怎样将图片拼接成长图

    excel图片链接显示为图片_怎样将图片拼接成长图由于公司需要统计根据门店业绩和装修档次定制扶持政策,所以要到处携带门店门头照片+业绩的报表,而数据库存储的是图片的链接。由于后台统计报表相对应的库暂时没有插入图片的功能。所以通过宏来完成将Excel中url替换为插入图片,又为了避免插入图片太多,导致Excel大小暴增,所以在选择了对应门店门头照片链接时才插入图片。具体步骤如下:1、进入对应sheet页的ViewCode一种…

  • win10下使用vs2015编译支持xp系统的libcurl

    win10下使用vs2015编译支持xp系统的libcurl在我的一篇博客中写了编译libcurl的,那种方式编译的curl动态库在win7到win10上可以使用,但是在xp系统里就不能使用了,接下来讲解一种方法可以在xp系统里使用cur。1编译openssl由于在perl官网里提供的perl版本没有dmake,因此使用我提供的perl5.24带dmake的包,下载地址。安装好perl后,可以尝试使用ppminstalldmake命令来进行安装dmake模块,在我电脑里无法安装,因此直接使用dmake离线包。将dmake.exe所在目录添加到系统pat

  • opencv gamma校正_opencv resize函数踩坑

    opencv gamma校正_opencv resize函数踩坑//链接https://blog.csdn.net/linqianbi/article/details/78617615//Gamma校正#include<iostream>#include<opencv2\core\core.hpp>#include<opencv2\highgui\highgui.hpp>#include<opencv2\imgproc\imgproc.hpp>#include<cm…

  • linux常用命令修改文件权限_使用vim在指定目录下创建文件

    linux常用命令修改文件权限_使用vim在指定目录下创建文件chmod  -changefilemodebits:更改文件权限chmod是用来改变文件或者目录权限的命令,但只有文件的属主和超级用户(root)才有这种权限。更改文件权限的2种方式:一、权限字母+操作符表达式二、数字方法(常用)hmod数字权限方法(推进)命令格式:chmod  [数字组合]  文件名chmod[数字组合]目录名-R参数可递归生效(该目录下所有文件或子目录一起改…

  • KRACK 攻击解密安卓传输数据,OpenBSD 提前释出补丁

    KRACK 攻击解密安卓传输数据,OpenBSD 提前释出补丁比利时鲁汶大学的两位研究人员正式披露了被命名为KRACK(KeyReinstallationAttacks)的密钥重安装攻击,他们开发的概念验证攻击演示了对Android设备传输数据的解密能力。如果你的设备支持Wi-Fi,那么很有可能你的设备受到影响。运行Android、Linux、Apple、Windows、OpenBSD、联发科和…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号