如何用分隔符从单文件生成多文件?awk脚本报错求助
解决AWK脚本生成.tex文件的语法错误与需求实现
原脚本错误分析
- 命令行参数语法错误:
-F'║',和-vOFS=后的逗号是多余的,会导致AWK解析参数失败,正确写法需去掉逗号。 - 文件名拼接语法错误:
"output_"f[i]".tex"不符合AWK语法规则,变量与字符串拼接时需用空格分隔或括号包裹,且你的需求无需output_前缀。 - 逻辑冗余与字段处理错误:原脚本的循环逻辑完全冗余,且未正确处理记录分隔符
║导致的字段偏移——每条数据行以║开头,设置-F'║'后,实际的name|content在$2字段中,需再用|拆分。
修正后的AWK脚本
awk -v RS='║' -v FS='|' ' NR == 1 { next } # 跳过表头所在的第一个记录 $1 != "" { filename = $1 ".tex" # 拼接content(兼容content中可能包含|的情况) content = $2 for (i=3; i<=NF; i++) { content = content "|" $i } print content > filename close(filename) # 关闭文件句柄,避免打开过多文件 }' biennalis.txt
脚本说明
-v RS='║':将记录分隔符设为║,每个║分隔的内容为一条独立记录,直接跳过第一个记录(即表头行name|content)。-v FS='|':将字段分隔符设为|,拆分每条记录中的name($1)和content($2及后续字段)。- 内容拼接:循环拼接
$2之后的所有字段,避免content中包含|时丢失内容。 close(filename):每次写入后关闭文件,避免AWK因打开过多文件句柄报错。
验证效果
执行脚本后,会生成两个符合要求的文件:
Is-id27-ref06-01-13-1914.tex:内容为对应第二列的完整文本Is-id27-ref01-01-18-0045.tex:内容为对应第二列的完整文本
内容的提问来源于stack exchange,提问作者A. Cedano
相关产品推荐
相关产品推荐

