xargs grep 提案

xargs grep 提案
grep -v "\<Swap" instruments.log | awk '{ idx=index($0, "MasterId="); masterId=substr($0, idx+length("MasterId=")+1); masterId=substr(masterId,1,index(masterId,"L")-3); print masterId; }' | xargs grep rel.log

awk出力などで各MasterId / Usageを検索する必要があります。どうすればいいですか?rel.logxargs

ベストアンサー1

複数行のパターンをgrepに渡して、パターン一致を含む行を検索できます。つまり、マルチラインパターンは、各ラインのパターンを分離したものです。

print_one_pattern_per_line | grep -f - rel.log

ところで、print_one_pattern_per_line部分を簡素化できます。とにかくawkを呼び出しているので、そこから入力行の一致を実行できます。 awkコードは、正規表現置換を使用してすべてを削除するより簡単な方法で書くことができます(コードは最初のインスタンスと一致し、下の正規表現は最後のインスタンスと一致するため、各行でMasterId=一度だけ発生するものと仮定します)。MasterId=

<instruments.log awk '
    !/(^|[[:space:]])Swap/ {
        gsub(/.*MasterId=/, "");
        $0 = substr($0, 1, index($0, "L")-3);
        print;
    }' | grep -f - rel.log

おすすめ記事