如何根据输入文件拆分日志文件?

如何根据输入文件拆分日志文件?

我有一个大文档,我已将其拆分成几个单独的文档。我有一个main.tex文件和几个使用-commandfile_i.tex包含的文件。有时这种包含是嵌套的,即其中一个文件包含另一个文件。main.tex\inputfile_i.tex

生成的日志文件main.log如下所示:

blabla
(main.tex
blabla
blabla
(file_1.tex
blabla
)
(file_2.tex
blablabla
(file_2_1.tex)
)
blabla
)

我想知道是否存在某种方法/脚本可以将此文件拆分为例如part_main.logpart_file_1.log和。part_file_2.logpart_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";
         $_ = "";
      }
   }
}

相关内容