AWK如何为分隔符分割的每组内所有行添加相同连续序号前缀
解决方案
你可以直接用更简单的行处理逻辑实现需求,无需修改记录分隔符:
awk '/^####$/{group++;next} {print "Group" (group+1) "," $0}' file.txt
原命令错误原因
- 将RS设为
####后,awk读取的每一段记录会包含块前后的换行符,直接在块前拼接组号前缀时,就会出现组号单独占一行的问题 - 文件末尾的
####之后存在空内容,会被识别为额外的有效记录,导致多输出了Group4
原思路的修正版本
如果你想保留修改记录分隔符的实现方式,可以对每个块内的行单独处理:
awk 'BEGIN{ RS="####\n?" } $0 { # 去除块末尾的多余换行 gsub(/\n$/, "", $0) # 按换行拆分块为单独的行 split($0, lines, "\n") # 遍历所有行添加相同组号输出 for (idx in lines) { print "Group" (group+1) "," lines[idx] } group++ }' file.txt
内容的提问来源于stack exchange,提问作者Makunata
相关产品推荐
相关产品推荐

