将块中的行转换为制表符分隔

nev*_*int 4 unix linux awk sed

我在 2 个块中有以下几行(实际上有大约 10K)。在这个例子中,每个块包含 3 行。但实际上是 6 行。

xox
91-233
chicago

koko
121-111
alabama
Run Code Online (Sandbox Code Playgroud)

我想把它变成

xox  91-233  chicago
koko 121-111 alabama
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我试过了,tr "\n" "\t"但没有做我想做的。

Joh*_*024 5

$ awk -F'\n' '{$1=$1} 1' RS='\n\n' OFS='\t' file
xox     91-233  chicago
koko    121-111 alabama 
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

awk 将输入划分为记录,并将每个记录划分为字段。

  • -F'\n'

    这告诉 awk 使用换行符作为字段分隔符。

  • $1=$1

    这告诉 awk 将第一个字段分配给第一个字段。虽然这看起来什么都不做,但它会导致 awk 将记录视为已更改。因此,使用我们为 分配的值(ORS输出记录分隔符)打印输出。

  • 1

    这是 awk 用于打印该行的神秘简写。

  • RS='\n\n'

    这告诉 awk 将两个连续的换行符视为记录分隔符。

  • OFS='\t'

    这告诉 awk 使用制表符作为输出的字段分隔符。