如何用shell高效提取每行任意位置的product和version字段输出两列
awk 实现无固定顺序键值对提取方案
针对你这种每行键值对顺序不固定的场景,以下awk脚本可以快速完成提取,性能远高于shell的while read循环:
awk '{ # 每行处理前清空存储变量 product = "" version = "" # 遍历当前行所有字段 for (i = 1; i <= NF; i++) { # 匹配到键则取下一个字段作为对应值 if ($i == "product") product = $(i+1) if ($i == "version") version = $(i+1) } # 两个值都存在时按要求输出,若允许缺省可删除if判断 if (product != "" && version != "") { print product, version } }' 待处理的文件路径
如果需要输出的两列对齐更规范,可以将print product, version替换为printf "%s\t%s\n", product, version,用制表符分隔两列。
内容的提问来源于stack exchange,提问作者chister
相关产品推荐
相关产品推荐

