awk:如何在查找文件分隔符号之前在文件中追加行?

时间:2015-02-13 13:08:20

标签: windows awk gawk

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 singhEd Morton

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

但如果该行以pipe开头,则不会“跳过”向前一行附加一行。

如何修改awk程序,将所有行附加到上一行,直到awk遇到记录分隔符pipe(并继续处理直到文件末尾)?< / p>

1 个答案:

答案 0 :(得分:5)

你可以说:

$ awk -v RS="|" '{$1=RS$1} 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>

这会将记录分隔符设置为管道|,然后使用$1=$1表达式重构所有行。但是因为你想在每一行前面加一个管道,我们在这个分配中加上RS。然后,我们评估NF>1,以便打印非空行。