如何将分隔符之间的文本拆分为多个文件?

Fab*_*bio 7 bash text-processing split

我有一个包含以下内容的文本文件:

"random
textA"
"random
random
textB"
Run Code Online (Sandbox Code Playgroud)

分隔符是 "

如何使用 bash 命令将包含的内容拆分为多个文件,如下所示?

文件 1:

random
textA
Run Code Online (Sandbox Code Playgroud)

文件 2:

random
random
textB
Run Code Online (Sandbox Code Playgroud)

我进入了使用csplitor 的例子,awk但它们没有涵盖这个文本布局。

αғs*_*нιη 6

简单awk命令:

awk 'NR%2==0{ print > "File "++i }' RS='"' file
Run Code Online (Sandbox Code Playgroud)

RS定义"为记录分隔符,NR是记录编号。如果记录号是 2 的模数(因为我们有另一个"记录的第一个),则将当前记录打印$0File #.


小智 5

如果开头的引号总是在行的开头,csplit 会像这样正常工作:

bash$ csplit /tmp/data '/^"/'
Run Code Online (Sandbox Code Playgroud)

这会生成名为 xx00 等的文件。请注意,您的示例删除了引号,而这不会。你需要一个命令行 sed 来做到这一点:

bash$ for file in xx* ; do { sed 's/^"//;s/"$//;' ${file} >x${file}; } ; done
Run Code Online (Sandbox Code Playgroud)