如何用awk实现3字段起始行的分组数据行合并
解决方案
可以用以下awk脚本实现需求:
NF == 3 { if (line != "") { print line line = "" } sub(/^[[:space:]]+/, "", $0) line = $0 next } { line = line " " $0 } END { if (line != "") { print line } }
代码说明:
- NF == 3:匹配仅含3个字段的行
- 如果
line变量不为空(说明已累积一组数据),先打印该组数据并换行,随后清空line sub(/^[[:space:]]+/, "", $0):删除当前行的所有行首空格- 将处理后的当前行赋值给
line,跳过后续逻辑
- 如果
- 其他行:直接将当前行内容以空格分隔追加到
line变量后 - END块:处理最后一组数据,确保最后一行能正常输出
将脚本保存为merge.awk,执行以下命令即可得到目标格式:
awk -f merge.awk input.txt
内容的提问来源于stack exchange,提问作者lucian
相关产品推荐
相关产品推荐

