awk strip line break from result

时间:2017-09-02 10:20:17

标签: awk

我有一个简单的awk函数:

awk '/ALPHA/ {print} /BETA/,/GAMMA/ {print}' file

并打印出2个匹配项,第一个匹配该行与“ALPHA'第二个是“BETA'”之间的范围。和' GAMMA'。由于范围输出包括换行符,我想在一行中尝试过:

awk '/FIRST/ {print} /SECOND/,/THIRD/ {gsub(/\n/," "); print}' file

但它没有效果。如何摆脱第二场比赛的换行?

2 个答案:

答案 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

这将删除所有额外的空格以及换行符