awk:如何在文件中追加行直到找到文件分隔符?
awk: how to append lines in a file until finding a file separator symbol?
运行 GnuWin32
在 Windows 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
,以便打印非空行。
运行 GnuWin32
在 Windows 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
,以便打印非空行。