如何使用awk使用空行作为记录分隔符和使用换行符作为字段分隔符?

如何使用awk使用空行作为记录分隔符和使用换行符作为字段分隔符?

我有一个文件需要以某种方式格式化。文件中的记录具有以下格式;

Record
One

Record
Two

每条记录由空行分隔,每个字段由换行符分隔。我需要以下格式的记录;

Record:One

Record:Two

这就是我目前所拥有的;

#!/bin/bash

cat File.txt | awk '{ RS=""; FS="\n"; OFS=":"; ORS="\n" } {print $1,$2 }'

这段代码给出了这个输出;

:ecord
:one

这与我正在寻找的东西并不接近。这可以一行完成吗?

答案1

尝试这个,

awk NF=NF RS="" FS="\n" OFS=":" ORS="\n"  File.txt

Record:One
Record:Two

答案2

在 Perl 中:

perl -l -p -e 'BEGIN {$/="";  $\="\n\n"}; s/\n/:/mg' input 
  • -l启用 Perl 对记录结尾的自动处理。

  • -p在脚本周围放置一个隐式while ... print循环,以便它自动读取、处理然后打印每条记录(类似于 awk)。

  • 将输入记录分隔符 ( $/) 设置为空$/=""告诉 perl 以段落模式读取输入(一个或多个空行分隔每个记录)。

  • $\="\n\n"将输出记录分隔符设置为两个换行符,以便记录由空行分隔。

  • 然后,它将每个记录中的所有换行符替换为:.

这适用于每条记录中任意数量的字段。记录中的每一行都是一个单独的字段。

输出示例:

$ perl -lpe 'BEGIN {$/=""; $\="\n\n"}; s/\n/:/mg' input 
Record:One

Record:Two

注意:后面有一个空行Record:Two

相关内容