数组 – 如何将变量切分为数组索引?
存在这个典型问题:给定值列表,检查它们是否存在于数组中.
在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] = “再见” 如您所见,我们切入一个临时变量v以便稍后初始化最终和有用的变量名[]. 有没有更快的方法来初始化数组的索引而不是设置一个,然后使用其值作为权威的索引? 解决方法
不,这是最快的(由于哈希查找)和最健壮的(由于字符串比较)方式来做你想要的.
这个: BEGIN{split(values,v); for (i in v) names[v[i]]} 在启动时发生一次,并且在此期间将几乎没有时间: $1 in array_var 对于每一行输入都会发生一次(因此需要具有最佳性能的位置)是散列查找,因此是将字符串值与一组字符串进行比较的最快方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |