0

次の種類の文字列のペアを含むファイルがあります。

Call Stack: [UniqueObject1] | [UnOb2] | [SuspectedObject1] | [SuspectedObject2] | [SuspectedObject3] |  [UnOb3] | [UnOb4] | [UnOb5] | ... end till unique objects

Call Stack: [UniqueObject1] | [UnOb2] | 0x28798765 | 0x18793765 | 0x48792767 |  [UnOb3] | [UnOb4] | [UnOb5] | ... end till unique objects

ファイルで発生するそのようなペアはたくさんあります。このペアの属性は、ペアの最初の部分に「SuspectedObject1」、「SuspectedObject2」などがあり、ペアの2番目の部分でそれらのオブジェクトのアドレスのHEX-VALUESに置き換えられることです。

私がやりたいのは、ペアの2番目の部分をすべて削除することです。

ペアは特定の順序で発生するわけではなく、間に多くの線で区切られている可能性があることに注意してください。

このファイルの各行を反復処理する予定です。疑わしいオブジェクトではなくアドレスとして16進文字列が指定されている場合は、次の正規表現の比較を開始します。

Call Stack: [UniqueObject1] | [UnOb2] | * | * | * |  [UnOb3] | [UnOb4] | [UnOb5] | ... end till unique objects

ファイル全体で文字列が一致する場合は、この特定の行をファイルから削除します。

誰かがこれを行うためのシェルの方法を提案できますか?

4

1 に答える 1

0

私があなたの質問を正しく理解しているなら、あなたはを使う必要があるかもしれませんawk。次のように実行します:

awk -f script.awk file file

内容script.awk

BEGIN { 
    FS=" \\| "
}

FNR==NR {
    $3=$4=$5=""
    a[$0]++
    next
}

$3 ~ /^0x[0-9]{8}$/ {
    r=$0
    $3=$4=$5="" 
    if (a[$0]<2) { 
        print r
    }
    next
}1

または、これがワンライナーです。

awk -F ' \\| ' 'FNR==NR { $3=$4=$5=""; a[$0]++; next } $3 ~ /^0x[0-9]{8}$/ { r=$0; $3=$4=$5=""; if (a[$0]<2) print r; next }1' file{,}
于 2012-12-27T13:52:30.810 に答える