Linux将文本块转换为文本行

Dav*_*rks 1 linux bash awk text

我有一个看起来像这样的文件:

ignoretext
START
a b
c d
e
END
ignoretext
START
f g h
i
END
ignoretext
Run Code Online (Sandbox Code Playgroud)

我想把它翻译成以下几行:

a b c d e
f g h i
Run Code Online (Sandbox Code Playgroud)

Jot*_*tne 5

这是一种方法 awk

awk '/END/ {ORS=RS;print "";f=0} f; /START/ {ORS=" ";f=1}' file
a b c d e
f g h i
Run Code Online (Sandbox Code Playgroud)

添加了一个在行尾不提供空间的版本.这可能是更短的方式

awk 'a && !/END/ {printf FS} /END/ {print "";f=a=0} f {printf "%s",$0;a++}  /START/ {f=1}'
a b c d e
f g h i
Run Code Online (Sandbox Code Playgroud)

  • 是的,每当我做其中的一个时,我会在测试时添加一个`| tr'''#',以确保它们很难被发现,有时当你错误地添加它们时它们并不明显. (2认同)
  • 哦,从来没有`printf $ 0`或者当输入数据包含printf格式化字符时,你会得到一个令人讨厌的惊喜,例如`%`.始终使用`printf fmt,data`(例如`printf"%s",$ 0`)的完整printf概要来打印输入数据. (2认同)