我在文本文件中记录了以下格式的记录:
Record1
Record1
Record1
Record1
Record2
Record2
Record2
Record2
...
我需要将此文件转换为 CSV,方法是用逗号替换前 3 个换行符并删除第 4 个换行符,结果如下所示:
Record1,Record1,Record1,Record1
Record2,Record2,Record2,Record2
...
在 Bash 中执行此操作的最佳方法是什么,其中最好的方法更多的是健壮性而不是性能 - 该任务不会经常完成,但确实需要允许值包含除空格和换行符之外的几乎任何字符。
我会为此使用 awk
将 RS 设置为空字符串意味着 2 个或更多换行符分隔记录。
字段分隔符是单个换行符。
$1 = $1
是强制 awk 使用输出字段分隔符重写当前记录的惯用方法。只是为了好玩,用 python one-liner[1] 来创建预期的结果:
线路:
当您将上面的文本(不带前导 $)粘贴到(bash)终端时,您将得到这个...
...当从包含示例文本的“记录”中读取时(重复)...
只需一个简单的步骤即可删除所有那些“,END”;例如,将其全部通过管道传输到 sed 中;
附加
| sed -re "s/,END$//"
到最后一行。[1] 上面的内容最好在一行中输入,只需跳过
\
's,这些是为了更好的可读性而添加的。使用米勒并运行
你得到
一些注意事项:
skip-trivial-records
删除空行;nest --ivar "," -f 1
合并记录值,将它们分开,