awk:如何在文件中追加行直到找到文件分隔符?

awk: how to append lines in a file until finding a file separator symbol?

运行 GnuWin32Windows 7 之下。具有此结构的文件:

|<text_0>
<text_1>
<text_2>
  until
<text_16>
|<text_0>
<text_1>
<text_2>
  until
<text_12>
|<text_0>
<text_1>
<text_2>
  until
<text_31>

< more of the same > 

pipe(分隔符)开头的行之间的行数可变。

期望的输出:

|<text_0><text_1><text_2>  until <text_16>
|<text_0><text_1><text_2>  until <text_12>
|<text_0><text_1><text_2>  until <text_31>

在Windows(故双引号)都试过了(来自aypal singh and Ed Morton

awk "{ ORS = (NR%2 ? FS : RS) } 1" < in.txt > out.txt

但这不会 "skip" 如果该行以 pipe.

开头,则将一行附加到上一行

如何修改awk程序,将所有行追加到上一行,直到awk遇到记录分隔符pipe(并继续处理,直到文件结束) ?

你可以说:

$ awk -v RS="|" '{=RS} NF>1' a
|<text_0> <text_1> <text_2> until <text_16>
|<text_0> <text_1> <text_2> until <text_12>
|<text_0> <text_1> <text_2> until <text_31>

这会将记录分隔符设置为管道 |,然后使用 = 表达式重构所有行。但是由于您希望在每行前面有一个竖线,我们在此作业中添加了 RS 。然后,我们评估 NF>1,以便打印非空行。