Awk:检查字段值是否在给定的
我需要打印所有行,其中字段$2是以下字段之一(23、17、21、1) 不起作用应该这样做:Awk:检查字段值是否在给定的,awk,Awk,我需要打印所有行,其中字段$2是以下字段之一(23、17、21、1) 不起作用应该这样做: awk '$2~/^(23|17|21|1)$/' file 这将测试字段#2是否为23、17、21或1中的一个 仅举一个有关如何使用阵列的示例: awk 'BEGIN{split("23 17 21 1",tmp); for (i in tmp) arr[tmp[i]]} $2 in arr' file 制作一个带有数字的变量数据, 使用Split将其拆分为数组arr 如果在arr中找到$2,则在
awk '$2~/^(23|17|21|1)$/' file
这将测试字段#2
是否为23、17、21或1中的一个
仅举一个有关如何使用阵列的示例:
awk 'BEGIN{split("23 17 21 1",tmp); for (i in tmp) arr[tmp[i]]} $2 in arr' file
制作一个带有数字的变量数据,
使用Split
将其拆分为数组arr
如果在arr中找到$2
,则在每行前面循环使用arr中的所有值并打印
编辑:用Eds建议更新。确实如此!谢谢@不客气。我刚刚添加了一个关于如何使用数组的示例。+1但是data=“23 17 21 1”;split(data,arr,“”)
可以简单地split(“23 17 21 1”,arr)
而且更好的完整解决方案是开始{split(“23 17 21 1”,tmp);对于(我在tmp中)arr[tmp[i]}$2在arr'文件中
,从那时起,你不需要为每行循环一次数组。@EdMorton感谢更新。我知道这可能会缩短一些,更多的人把它作为一个例子。将更新该帖子。
awk 'BEGIN{split("23 17 21 1",tmp); for (i in tmp) arr[tmp[i]]} $2 in arr' file