如何通过保留下一行来将下一行合并到当前行

use*_*365 8 vi awk sed

我有这个:

A abc
B abc
C abc
D abc
...
Run Code Online (Sandbox Code Playgroud)

我需要有这样的文件输出:

A abc B abc
B abc C abc
C abc D abc
D abc ..
...
Run Code Online (Sandbox Code Playgroud)

我试过这个: sed 'N;s/\n/ /'但这会删除下一行。

M. *_*din 6

sed

sed '1{h;$p;d;};H;x;s/\n/ /;$G' file
Run Code Online (Sandbox Code Playgroud)

阅读第一行时;该行被存储到保存空间 ( h ) 中。如果它也是最后一行(仅由一行组成的文件),那么它将被打印出来($p)。否则,不会被打印。然后删除模式空间并开始下一个循环(d)。

在后续的每一行上:将换行符和刚刚读取的行附加到保留空间 ( H ),然后交换保留空间和模式空间 ( x )。换行符被替换为空格 ( s/\n/ / )。如果它是最后一行,则刚刚读取的行将被附加到当前模式空间,并带有前导换行符($G)。


Rav*_*h13 4

您能否尝试以下根据所示示例编写的内容。在https://ideone.com/6BGYTy中编写并测试

awk 'prev{print prev,$0} {prev=$0}' Input_file
Run Code Online (Sandbox Code Playgroud)

或者如果您想打印最后一行,请尝试:

awk 'prev{print prev,$0} {prev=$0} END{print}'  Input_file
Run Code Online (Sandbox Code Playgroud)

说明:简单地检查条件是否 prev 不为空,然后打印 prev 和当前行。然后将 prev 的值设置为当前行。因此,在第一行中,它不会打印任何内容,但从第二行开始,它将按照 OP 显示的示例打印行。

  • 您可以添加“END{print}”。 (2认同)