使用awk删除指定名称及关联数据时出现重复打印问题
解决交替名称-数据行的指定条目删除问题
输入数据格式
输入为交替排列的名称行与数据行,示例如下:
>name1 textA >name2 textB >name3 textC
需求目标
删除包含指定名称(如name3)的名称行,以及其对应的下一行数据。
原命令的问题
使用以下命令时,输出首行会出现重复的>>符号:
awk 'BEGIN {RS = ">"; ORS = ""} !/name3/ {print">"; print $0}' FILE
错误输出结果:
>>name1 textA >name2 textB
问题根源:将RS(记录分隔符)设为>后,文件开头的空内容会被识别为第一个记录,这个空记录满足!/name3/的条件,会先输出一个>;随后处理第一个有效记录name1时又输出一个>,导致首行符号重复。
修正后的命令
方案1:过滤空记录
在输出前判断记录是否非空,跳过开头的空记录:
awk 'BEGIN {RS = ">"; ORS = ""} $0 != "" && !/name3/ {print">"; print $0}' FILE
方案2:更简洁的输出逻辑
直接将>与有效记录拼接输出,同时利用默认换行保持原有格式:
awk 'BEGIN {RS=">"} !/name3/ && $0 {print ">" $0}' FILE
修正后的输出结果:
>name1 textA >name2 textB
内容的提问来源于stack exchange,提问作者lsoldini
相关产品推荐
相关产品推荐

