我有一个包含以下内容的文本文件:
"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 为模(因为我们有另一个"
记录的第一个),则将当前记录打印$0
到File #
.
答案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