我有一个文件需要以某种方式格式化。文件中的记录具有以下格式;
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
。