0

私は2つのファイルを持っています

ファイル 1

INFO  : temp0 Directory
            created
INFO  : temp0 Directory created

ファイル2

INFO  : reuse temp1

したがって、これら2つのファイルを区別している間、.で終わるステートメントを無視したいと思いますDirectory created。私は書きます

diff -I 'Directory created' file1 file2

したがって、このステートメントは file1 の 2 行目を正常に無視していますがDirectory created、別の行に含まれている最初の行は無視していません。

誰かが解決策を知っているなら、私を助けてください!

4

2 に答える 2

0

基本的に-私は、差異のブロック内のすべての行が一致する場合にのみ一致します。あなたが説明した場合-条件は成り立たない。

diff -I "INFO" 1 2 | grep -v "Directory created"

うまくいくかもしれませんが、diffブロックの境界を正しく計算しません

それが役立つことを願っています

于 2012-08-24T08:43:43.120 に答える
0

Well, I think the simplest solution would be to filter out these lines from the first file. For example, you can do this using the following awk script:

# if line contains 'Directory created', just skip it.
/Directory created/ {
    had_dir = ""
    next
}

# if line contains sole 'Directory', store it and lookup next line.
/Directory/ {
    had_dir = $0
    next
}

# if line contains sole 'created' and we stored a line (which means
# it contained 'Directory'), then delete the stored one and skip
# (effectively, skip both).
/created/ && had_dir {
    had_dir = ""
    next
}

# otherwise, if we stored a line, print it.
had_dir {
    print had_dir
    had_dir = ""
}

# and print the current line.
{
    print
}

If your input is more complex, you may need to adjust the regexes a bit.

Then, use the script to filter out first file:

$ awk -f script.awk file1 | diff - file2
0a1
> INFO  : reuse temp1

Note that you're passing - as first argument to diff, to make it read the piped output of awk instead of the file.

And also note that the line offsets will no longer be correct.

于 2012-08-24T10:24:22.120 に答える