如何使用bash或awk实现基于数组内容的条件打印
简洁awk实现方案
直接使用如下一行awk命令即可满足需求:
awk -v par="${input[*]}" 'BEGIN{split(par, arr, " ")} NR>1 {exist[$1]=1} END{print "SS RESULT"; for(i=1;i<=length(arr);i++) print arr[i], (arr[i] in exist ? 1 : 0)}' input
逻辑说明
- 用
-v par="${input[*]}"将bash数组整体作为参数传入awk - BEGIN块中把传入的参数字符串按空格拆分,存为awk内部数组
arr - 逐行读取输入文件时跳过表头行,将第一列的键存入
exist数组做存在性标记 - 输入文件读取完成后进入END块,先打印要求的表头,再遍历
arr数组的所有元素,判断元素是否在exist数组中,输出对应的1/0标记
这个实现只需要读取一次输入文件,相比循环调用grep的方案效率更高,代码也更紧凑,适合放到yaml配置中使用。
内容的提问来源于stack exchange,提问作者monk
相关产品推荐
相关产品推荐

