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

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

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

"random
textA"
"random
random
textB"

分隔符是"

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

文件1:

random
textA

文件2:

random
random
textB

csplit我使用or进入示例awk,但它们没有涵盖此文本布局。

答案1

简单awk命令:

awk 'NR%2==0{ print >("File " ++i) }' RS='"' infile

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

答案2

如果开头引号始终位于行的开头,则 csplit 将正常工作,如下所示:

bash$ csplit /tmp/data '/^"/'

这会生成名为 xx00 等的文件。请注意,您的示例删除了引号,而这个则没有。您需要一个命令行 sed 来执行此操作:

bash$ for file in xx* ; do { sed 's/^"//;s/"$//;' ${file} >x${file}; } ; done

答案3

与GNUawk

awk -v RS='"[[:space:]]*"' '
{sub(/^"|"[[:space:]]*$/, "");print > "output." ++n; close("output." n)}' file.txt

答案4

你可以做:

awk -v RS=\" -v ORS= \
  '{ sub(/^\n*/,"");sub(/\n*$/,""); };
  /^\n*$/ { next;};
  { if(strcnt==0) { print $0 >"file1"; strcnt++;} else
  { print $0 >"file2"; }; }' file

相关内容