我有一个简单的awk函数:
awk '/ALPHA/ {print} /BETA/,/GAMMA/ {print}' file
并打印出2个匹配项,第一个匹配该行与“ALPHA'第二个是“BETA'”之间的范围。和' GAMMA'。由于范围输出包括换行符,我想在一行中尝试过:
awk '/FIRST/ {print} /SECOND/,/THIRD/ {gsub(/\n/," "); print}' file
但它没有效果。如何摆脱第二场比赛的换行?
答案 0 :(得分:1)
最终代码中的print
为每个打印行引入了换行符。
您必须输出printf("%s ", $0)
行(不需要gsub
)。
但是,这会在退出范围时引起问题,因为输出中现在没有换行符。因此,您可以添加一个额外的块来输出该换行符(在/SECOND/,/THIRD/ {...}
之后):
/THIRD/ { printf("\n") }
如果您的行与/THIRD/
匹配且之前没有相应的行匹配/SECOND/
,则会导致虚假的换行符包含在输出中。
答案 1 :(得分:0)
我有一个有效的解决方案:
'awk '/FIRST/ {print} /SECOND/,/THIRD/ {gsub(/ /, "", $0); printf("%s ", $0)}' file
这将删除所有额外的空格以及换行符