加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

数组 – 如何将变量切分为数组索引?

发布时间:2020-12-14 00:43:34 所属栏目:Linux 来源:网络整理
导读:存在这个典型问题:给定值列表,检查它们是否存在于数组中. 在awk中,数组中的技巧val工作得很好.因此,典型的想法是将所有数据存储在一个数组中,然后继续进行检查.例如,这将打印数组中存在第一列值的所有行: awk 'BEGIN {initialize the array} $1 in array_v
存在这个典型问题:给定值列表,检查它们是否存在于数组中.

在awk中,数组中的技巧val工作得很好.因此,典型的想法是将所有数据存储在一个数组中,然后继续进行检查.例如,这将打印数组中存在第一列值的所有行:

awk 'BEGIN {<<initialize the array>>} $1 in array_var' file

但是,初始化数组需要一些时间,因为数组中的val检查索引val是否在数组中,而我们通常存储在数组中的是一组值.

当从命令行提供值时,这变得更加相关,其中那些是我们想要包括为数组索引的元素.例如,在这个基本示例中(基于recent answer of mine,这引发了我的好奇心):

$cat file
hello 23
bye 45
adieu 99
$awk -v values="hello adieu" 'BEGIN {split(values,v); for (i in v) names[v[i]]} $1 in names' file
hello 23
adieu 99

> split(values,v)将变量值切片为数组v [1] =“hello”; V [2] = “再见”
> for(i in v)names [v [i]]用名称[“hello”]初始化另一个数组名[],用空值初始化名称[“adieu”].这样,我们就准备好了
> $1,用于检查第一列是否为names []中的任何索引.

如您所见,我们切入一个临时变量v以便稍后初始化最终和有用的变量名[].

有没有更快的方法来初始化数组的索引而不是设置一个,然后使用其值作为权威的索引?

解决方法

不,这是最快的(由于哈希查找)和最健壮的(由于字符串比较)方式来做你想要的.

这个:

BEGIN{split(values,v); for (i in v) names[v[i]]}

在启动时发生一次,并且在此期间将几乎没有时间:

$1 in array_var

对于每一行输入都会发生一次(因此需要具有最佳性能的位置)是散列查找,因此是将字符串值与一组字符串进行比较的最快方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读