3

ref.txt行と 2 つのテキスト ファイル(参照) との行を比較していますlog.txt。しかし、どちらのファイルにも無視したい任意の数の空白行があるかもしれません。どうすればこれを達成できますか?

ref.txt

one

two


three



end

log.txt

one
two
three
end

出力に不正なログ行はありません。つまり、 とlog.txt一致しref.txtます。

疑似コードで達成したいこと:

while (traversing both files at same time) {
    if ($l is blank line || $r is blank line) {
        if ($l is blank line)
            skip to next non-blank line
        if ($r is blank line)
            skip to next non-blank line
    }
    #continue with line by line comparison...
}

私の現在のコード:

use strict;
use warnings;

my $logPath    = ${ARGV [0]};
my $refLogPath = ${ARGV [1]} my $r;    #ref log line
my $l;                                 #log line

open INLOG, $logPath    or die $!;
open INREF, $refLogPath or die $!;

while (defined($l = <INLOG>) and defined($r = <INREF>)) {
    #code for skipping blank lines?
    if ($l ne $r) {
        print $l, "\n";                #Output incorrect line in log file
        $boolRef = 0;                  #false==0
    }
}
4

6 に答える 6

7

Linux プラットフォームを使用している場合は、次を使用します。

diff -B ref.txt log.txt

この-Bオプションにより、空白行を挿入または削除するだけの変更が無視されます

于 2012-07-19T16:48:59.817 に答える
2

次の正規表現と比較することで、空白行をスキップできます。

next if $line =~ /^\s*$/

これは、空白行を構成する可能性のある空白または改行文字と一致します。

于 2012-07-19T16:38:57.827 に答える
0
man diff

diff -B ref.txt log.txt
于 2012-07-19T16:46:47.810 に答える
0
# line skipping code
while (defined($l=<INLOG>) && $l =~ /^$/ ) {}  # no-op loop exits with $l that has length

while (defined($r=<INREF>) && $r =~ /^$/ ) {}  # no-op loop exits with $r that has length
于 2012-07-19T16:47:15.967 に答える