我在 2 个 block 中有以下几行(实际上有 ~10K)。 在此示例中,每个 block 包含 3 行。 block 由空行分隔。所以 block 就像“段落”。
xox
91-233
chicago
koko
121-111
alabama
我想把它变成制表符分隔的行,像这样:
xox 91-233 chicago
koko 121-111 alabama
我该怎么做?
我尝试了 tr "\n""\t"
,但它没有按照我的要求进行。
最佳答案
$ awk -F'\n' '{$1=$1} 1' RS='\n\n' OFS='\t' file
xox 91-233 chicago
koko 121-111 alabama
工作原理
Awk 将输入分成记录,并将每条记录分成字段。
-F'\n'
这告诉 awk 使用换行符作为字段分隔符。
$1=$1
这告诉 awk 将第一个字段分配给第一个字段。虽然这似乎什么都不做,但它会导致 awk 将记录视为已更改。因此,使用我们为
ORS
(输出记录分隔符)分配的值打印输出。1
这是 awk 用于打印该行的神秘速记。
RS='\n\n'
这告诉 awk 将两个连续的换行符视为记录分隔符。
OFS='\t'
这告诉 awk 使用制表符作为输出的字段分隔符。
关于csv - 将 block 中的行转换为制表符分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088799/