递归加入N行

4 linux shell awk sed tr

如何在shell脚本中获得以下结果?

This is line 1  
This is line 2  
This is line 3  
This is line 4  
This is line 5  
This is line 6  
This is line 7  
This is line 8  
This is line 9  
...  
...  
Run Code Online (Sandbox Code Playgroud)

期望的输出:

This is line 1 This is line 2 This is line 3  
This is line 4 This is line 5 This is line 6  
This is line 7 This is line 8 This is line 9  
... ... ....  
... ... ...  
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 9

awk 是你的朋友:

$ awk 'ORS=NR%3?FS:RS' file
This is line 1   This is line 2   This is line 3  
This is line 4   This is line 5   This is line 6  
This is line 7   This is line 8   This is line 9 
Run Code Online (Sandbox Code Playgroud)

这与以下相同:

$ awk 'ORS=NR%3 ? " " : "\n"' file
This is line 1   This is line 2   This is line 3  
This is line 4   This is line 5   This is line 6  
This is line 7   This is line 8   This is line 9  
Run Code Online (Sandbox Code Playgroud)

说明

如果记录数不是3的倍数,则将输出记录分隔符设置为空格; 否则,作为新线.

  • ORS 定义输出记录分隔符.
  • NR 定义记录的数量(在这种情况下为行).
  • FS定义字段分隔符.默认为" "(空格).
  • RS定义记录分隔符.默认为"\n"(新行).

更多信息和相关的例子在Idiomatic awk.