awk将记录分隔符(RS)更改为每2行

ibc*_*itn 6 bash awk command-line

我想知道如何使用Awk处理每两行数据而不是每一行.默认情况下,记录分隔符(RS)设置为每个新行,如何将其更改为每2行.

Bir*_*rei 6

这取决于您想要实现的目标,但一种方法是使用该getline指令.对于每一行,请阅读下一行并将其保存在变量中.所以你将有第一行$0和第二行even_line:

getline even_line
Run Code Online (Sandbox Code Playgroud)


The*_*eke 5

分而治之:分两步完成:

  1. 使用awk引入空行
    来分隔每个两行记录:NR%2==0 {print ""}
  2. 管道到另一个awk进程并将
    记录分隔符设置为空行:BEGIN {RS=""}

优点:在第二个awk过程中,您可以访问两行的所有字段$1 to $NF.

awk '{print}; NR%2==0 {print ""}' data | \
awk 'BEGIN {RS=""}; {$1=$1;print}'
Run Code Online (Sandbox Code Playgroud)

注意:
$1=$1此处用于强制执行$0(整个记录)的更新.
这保证输出在一行上打印两行记录.
在处理两行记录时修改程序中的字段后,就不再需要这样做了.


gle*_*man 5

如果要合并线条,请使用该paste实用程序:

$ printf "%s\n" one two three four five
one
two
three
four
five

$ printf "%s\n" one two three four five | paste -d " " - -
one two
three four
five 
Run Code Online (Sandbox Code Playgroud)