gpt4 book ai didi

awk:根据开始或结束模式连接行

转载 作者:行者123 更新时间:2023-12-04 08:20:43 25 4
gpt4 key购买 nike

我有一个多行文件,其中记录由新行分隔 (\n) .
每个记录拆分由一些文本标识 break .
如何使用 awk 以便记录以 break 开头或结尾它将它连接到上一行或下一行,同时保留记录分隔符。
输入( $ 代表 EOL)。多个 breaks;可以忽略或视为一:

A| break;$
B| break;$
C| break;$
D$
E|$
break; FGH|$
break; IJ| break;$
KLM| break;
NOP$
期望的输出:
A|B|C|D$
E|FGH|IJ|KLM|NOP$
当前代码(适用于 break;,但没有将以 break 开头的行连接到上一个:
awk '{if (sub(/break;$/,"")) printf "%s", $0; else if (sub(/^break;/,"")) printf $0,"%s"; else print $0}' myfile
我怀疑问题出在 else if 部分,但如果该行以 break; 开头,我无法找出连接到前一行的正确语法。 .
任何帮助将不胜感激,但请考虑 awk仅解决方案。
更新:
感谢所有做出贡献的人!下面的建议有效,但似乎有些记录连续 break;其中仍然存在问题:
A| break;
B| break;
C| break; break;
break; D$

最佳答案

你可以试试这个awk :

awk '!/break;|\|$/{print s $0; s=""; next} {gsub(/ *break; */, ""); s = s $0}' file

A|B|C|D
E|FGH|IJ|KLM|NOP

关于awk:根据开始或结束模式连接行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65511500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com