linux awk数组相关操作介绍

用awk进行文本处理,少不了就是它的数组处理。那么awk数组有那些特点,一般常见运算又会怎么样呢。我们先看下以下的一些介绍,结合样例我们会解说下它的不同之处。在 awk 中数组叫做关联数组(associative arrays),由于下标记能够是数也能够是串。awk 中的数组不必提前声明,也不必声明大小。数组元素用 0 或空串来初始化,这依据上下文而定。比如:

 

一、定义方法

 

1:能够用数值作数组索引(下标)

Tarray[1]=“cheng mo”
Tarray[2]=“800927”

2:能够用字符串作数组索引(下标)

Tarray[“first”]=“cheng ”
Tarray[“last”]=”mo”
Tarray[“birth”]=”800927”

使用中 print Tarray[1] 将得到”cheng mo” 而 print Tarray[2] 和 print[“birth”] 都将得到 ”800927” 。

 

二、数组相关函数

[chengmo@localhost ~]$ awk --version
GNU Awk 3.1.5

使用版本号是:3.1以上,不同版本号以下函数不一定同样

  • 得到数组长度(length方法使用

[chengmo@localhost ~]$ awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
4 4

length返回字符串以及数组长度,split进行切割字符串为数组,也会返回切割得到数组长度。

 

(asort使用):

[chengmo@localhost ~]$ awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}'
4

asort对数组进行排序,返回数组长度。

 

  • 输出数组内容(无序,有序输出):

[chengmo@localhost ~]$ awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 it
2 is
3 a

 

for…in 输出,由于数组是关联数组,默认是无序的。所以通过for…in 得到是无序的数组。假设须要得到有序数组,须要通过下标获得。

 

[chengmo@localhost ~]$ awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}' 
1 it
2 is
3 a
4 test

注意:数组下标是从1開始,与c数组不一样。

 

 

  • 推断键值存在以及删除键值:

一个错误的推断方法

[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}' 
no found
a a1
b b1
c

 

以上出现奇怪问题,tB[“c”]未定义,可是循环时候,发现已经存在该键值,它的值为空,这里须要注意,awk数组是关联数组,仅仅要通过数组引用它的key,就会自己主动创建改序列.

 

正确推断方法:

[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}'  
a a1
b b1

if(key in array) 通过这个方法推断数组中是否包括”key”键值。

 

删除键值:

[chengmo@localhost ~]$ awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}'                     
b b1

 

delete array[key]能够删除,相应数组key的,序列值。

 

三、二维数组使用(多维数组使用)

awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的訪问方式。例 如,array[2,4] = 1这种訪问是同意的。awk使用一个特殊的字符串SUBSEP (\034)作为切割字段,在上面的样例中,关联数组array存储的键值实际上是2\0344。

 

相似一维数组的成员測试,多维数组能够使用 if ( (i,j) in array)这种语法,可是下标必须放置在圆括号里。
相似一维数组的循环訪问,多维数组使用 for ( item in array )这种语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来訪问单独的下标分量。split ( item, subscr, SUBSEP)

 

[chengmo@localhost ~]$ awk 'BEGIN{

for(i=1;i<=9;i++)
{
  for(j=1;j<=9;j++)  
  {
tarr[i,j]=i*j;
print i,"*",j,"=",tarr[i,j];
  }
}
}'
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6

……

能够通过array[k,k2]引用获得数组内容.

 

方法二:

[chengmo@localhost ~]$ awk 'BEGIN{
for(i=1;i<=9;i++)
{
  for(j=1;j<=9;j++)  
  {
tarr[i,j]=i*j;
  }
}
for(m in tarr)              
{

split(m,tarr2,SUBSEP);
print tarr2[1],"*",tarr2[2],"=",tarr[m];
}
}'

 

以上是awk对数组的处理相关,希望对大家实用

转载于:https://www.cnblogs.com/mfryf/p/3640204.html

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

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

相关文章

java求最优解库,IPOPT在第二次求解时找到最优解

通常当我尝试使用IPOPT解决问题时&#xff0c;即使问题不可行&#xff0c;IPOPT也会显示运行过程&#xff0c;例如显示问题有多少约束以及问题的其他一般信息&#xff0c;但这次我遇到了一个奇怪的问题 . 我第一次解决它没有显示的问题&#xff0c;但第二次解决它&#xff0c;I…

ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)

2.连接相关 名称 类型 说明 Connection 指向一个数据库连接对象 Disconnected 设置为True将在数据库关闭后继续保持数据集的开启状态。 3. 数据获取 名称 类型 说明 FetchRows Integer 从数据库服务器获取一次性获取数据记录的条数&#xff0c;缺省25条。 Is…

详解汇编语言中乘法指令:MUL、IMUL

本文参考了马维华老师的《微机原理与接口技术》一书 指令格式&#xff1a; MUL REG/MEM &#xff1b;REG寄存器&#xff0c;MEM存储器 IMUL REG/MEM MUL和IMUL指令分别用于实现无符号数的乘法和有符号数的乘法运算。都只有一个源操作数&#xff0c;可以使寄存器或存储…

Android Resource介绍和使用

1. 相关文件夹介绍 在Android项目文件夹里面&#xff0c;主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件&#xff0c;即该文件夹里面的文件不会像xml&#xff0c;java文件被预编译&#xff0c;可以存放一些图片&#xff0c;html&#xff0c…

mysql.sock 111,错误2002(HY000):无法通过套接字’/var/run/mysqld/mysqld.sock’连接到本地MySQL服务器(111)...

在Ubuntu计算机上获取关于问题“ mysql”命令的错误&#xff1a;错误2002(HY000)&#xff1a;无法通过套接字’/var/run/mysqld/mysqld.sock’连接到本地MySQL服务器(111)服务未以以下错误启动&#xff1a;rootbettorssidekick:/# service mysql startstart: Job failed to sta…

c语言中的break和continue

break和continue是C语言中的两条语句&#xff0c;这两条语句在循环和选择结构中经常会遇到。 break首先最长见与switch语句中。比如我们设计一个程序&#xff0c;通过输入学生的成绩来确定学生成绩等级&#xff0c;等级一共分为四等&#xff0c;分别是优秀、良好、一般、较差&a…

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(44)-工作流设计-设计表单...

构建ASP.NET MVC4EF5EasyUIUnity2.x注入的后台管理系统&#xff08;44&#xff09;-工作流设计-设计表单 原文:构建ASP.NET MVC4EF5EasyUIUnity2.x注入的后台管理系统&#xff08;44&#xff09;-工作流设计-设计表单系列目录 设计表单是比较复杂的一步&#xff0c;完成一个表单…

汇编语言中变量的声明

参考链接为&#xff1a;http://zhidao.baidu.com/link?urlQZiRv_6nAzF1XHOG83SwngS1HoRZXWSP2a0uQEHVDON1rP1a07xlXCiYUXd0ORQP32h_7Nhfd-afCMox8q8McKDATAS SEGMENT;定义数据段BUF0 DB 1;定义一个字节型变量&#xff0c;名称是BUF0&#xff0c;初始值是01HBUF1 DB "2&qu…

php标签嵌入规范,HTML标签嵌套的详细规则

这次给大家带来HTML标签嵌套的详细规则&#xff0c;HTML标签嵌套的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。最近在重新学习HTML的知识&#xff0c;算是对HTML的一个重新认识吧&#xff01;别小看了这东西&#xff0c;一切的网页可都是以它为基础…

6、动态方法调用和使用通配符定义

action名称后面:!方法名即可;使用通配符:12345678910111213<?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds…

Sql 函数大全 (更新中...由难到简

1.字符处理类&#xff1a; 1.1 指定指定字符输出的次数 select replicate(1a,5) 结果&#xff1a;1a1a1a1a1a &#xff08;5个1a&#xff09;转载于:https://www.cnblogs.com/shengwei/p/4479662.html

C错误处理

本文为个人学习笔记&#xff0c;仅用于个人学习、复习使用&#xff01;c语言不提供对错误处理的直接支持&#xff0c;但是作为一种系统编程语言&#xff0c;它以返回值得形式允许您访问底层数据&#xff0c;在发生错误时&#xff0c;大多数的c或Unix函数调用返回1或NULL&#x…

存储过程——存储过程与视图(三)

数据库视图&#xff1a;视图是虚表&#xff0c;是从一个或几个基本表&#xff08;或视图&#xff09;中导出的表&#xff0c;在系统的数据字典中仅存放了视图的定义&#xff0c;不存放视图对应的数据。 在sql中视图是基于sql语句的结果集的可视化的表&#xff1b;视图包含行和列…

php如何转类型,PHP数据类型转换

指的是将数据(变量)的值转换成目标数据类型。PHP中有两种数据类型转换方式&#xff1a;自动转换&#xff0c;强制转换自动转换&#xff1a;系统根据操作所需要的类型将变量的值进行对应类型的转换自动转换都是系统本身所做的事情&#xff0c;不需要用户去干预。强制转换&#x…

lr_start_timer,lr_get_transaction_duration,lr_get_transaction_wasted_time函数使用总结

lr_start_timer&#xff1a; 函数的功能&#xff1a; 为了计算时间更加精确&#xff0c;可以用这个函数去掉LR自身的检查点所浪费的时间。如text check and image time Action() { double time_elapsed; merc_timer_handle_t timer;web_url("487989.html","URLh…

c可变参数

本文为个人学习笔记&#xff0c;仅供个人学习、复习使用。参考链接&#xff1a;链接1、链接2在c语言中&#xff0c;我们可以定义这样的函数&#xff0c;函数带有可变数量的参数。 int func(int num,...){ . . . } int main(){func(2,2,3); }1、要注意定义函数时函数的形式&…

dz打不开plugin. php,Discuz!应用中心打不开空白的解决方法

近期&#xff0c;很多使用Discuz!程序建论坛的站长都会发现&#xff0c;Discuz!后台的应用中心打不开了。这二天Discuz!终于给出了原因&#xff1a;十分抱歉的通知您&#xff0c;由于资源和人力投入问题&#xff0c;我们已经关闭了 www.discuz.net 的发言权限&#xff0c;但是历…

编程习题05

1、给定一个数组a[N],我们希望构造数组b[N]&#xff0c;其中b[i]a[0]*a[1]*...*a[N-1]/a[i]。在构造过程&#xff1a;不允许使用除法&#xff1b;要求O(1)空间复杂度和O(n)时间复杂度&#xff1b;除遍历计数器与a[N] b[N]外&#xff0c;不可使用新的变量(包括栈临时变量、对空间…

ECshop安装及报错解决方案总结

一、安装ECshop ECShop是一款B2C独立网店系统 &#xff0c;适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年3月推出以来1.0版以来&#xff0c;受到市场的检验&#xff0c;广受好评。 1.安装准备 ECshop最新版本为2.7.3…

Command mysql 中文,MySQL Command Line[mysql命令行常用命令]_MySQL

bitsCN.comMySql下载地址&#xff1a;www.mysql.org第一招、mysql服务的启动和停止net stop mysqlnet start mysql第二招、登陆mysqlmysql -u用户名-p用户密码mysql -uroot -p&#xff0c; 回车後提示你输入密码&#xff0c;输入12345&#xff0c;然後回车即可进入到mysql中了&…