如何使用awk按指定顺序提取含缺失项的分组记录并补空占位
正确处理方案
错误原因
原命令未在每组输出完成后清空存储字段的变量,前一组的赋值会一直保留,后续组没有对应字段时就会复用旧值,导致输出错误。
修正后命令
awk 'BEGIN {ORS = "\t"} /^group/ {print "\n" $0} /^aa/ {AA = $0} /^bb/ {BB = $0} /^cc/ {CC = $0} /^dd/ {DD = $0} /^end/ { print AA, BB, CC, DD AA = BB = CC = DD = "" }' test.txt
逻辑说明
- 在匹配到
end标记输出完当前组所有字段后,新增变量重置语句,将AA/BB/CC/DD全部置为空,下一组处理时不会残留上一组的数据 - 输出顺序保持你需要的
aa→bb→cc→dd的规则,缺失字段自动用空制表符占位,符合输出要求 - 如果后续需要扩展其他匹配字段,只需要新增对应变量,同时把新增变量加入
end块的输出列表和重置列表即可,适配灵活。
可选优化(按需使用)
如果不需要第一行开头的额外空行,可以将group匹配逻辑修改为:
/^group/ {if(NR>1) print "\n" $0; else print $0}
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

