![如何根据输入文件拆分日志文件?](https://linux22.com/image/247623/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E8%BE%93%E5%85%A5%E6%96%87%E4%BB%B6%E6%8B%86%E5%88%86%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一个大文档,我已将其拆分成几个单独的文档。我有一个main.tex
文件和几个使用-commandfile_i.tex
包含的文件。有时这种包含是嵌套的,即其中一个文件包含另一个文件。main.tex
\input
file_i.tex
生成的日志文件main.log
如下所示:
blabla
(main.tex
blabla
blabla
(file_1.tex
blabla
)
(file_2.tex
blablabla
(file_2_1.tex)
)
blabla
)
我想知道是否存在某种方法/脚本可以将此文件拆分为例如part_main.log
、part_file_1.log
和。part_file_2.log
part_file_2_1.log
编写一个临时脚本来执行此操作似乎并不困难,但这似乎也是一个常见的问题,因此我希望一些经过充分测试的脚本已经可用。
答案1
我不知道有什么“官方”脚本,但不久前我为类似任务编写了一个小型 perl 脚本。它有点像肮脏的黑客,而且测试很少,但对其他人来说可能也很有用。欢迎改进。
该脚本需要 TeX 的日志文件作为参数,并为每个包含的模块生成单独的 .log 文件。
#!/usr/bin/perl
use File::Basename;
die("Syntax: splitlog <logfile>") unless ($#ARGV == 1);
@log = <ARGV>;
push(@files, $ARGV[0]);
foreach (@log) {
chomp;
while (length($_) > 0) {
if (/^\(([^)]+)$/) {
push(@files, $1);
$_ = "";
$fname = basename($1);
open(LOG, ">$fname.log");
}
elsif (/^(\)+)\s*(.*)$/) {
for ($i=0; $i < length($1); ++$i) {
close(LOG);
pop(@files);
}
if ($#files > 0) {
$fname = basename($files[-1]);
open(LOG, ">>$fname.log");
}
$_ = $2;
}
else {
print LOG "$_\n";
$_ = "";
}
}
}