別々の行でのログ出力のフィルタリング

別々の行でのログ出力のフィルタリング

以下のように、一致するすべてのファイルを見つけるためにディレクトリで再帰的なgrepを実行しました。

grep -ER "match_string1|match_string2" /path/to/dir/

私が得た結果は次のとおりです。

/path/to/dir/timestamp.log:match_string1
/path/to/dir/timestamp.log:match_string2
/path/to/dir/timestamp.log:match_string2

ここでmatch_string1はモデル#を表します。ここで match_string2 はテスト結果を表します。

モデル番号とテスト結果が特定の基準に一致するときに計算できるように、この行をマージしたいと思います。

注:match_string2とmatch_string1の2つを同じ行に配置できます。

予想される出力の例:

/path/to/dir/timestamp.log:match_string1; /path/to/dir/timestamp.log:match_string2; /path/to/dir/timestamp.log:match_string2

ご協力ありがとうございます

ベストアンサー1

sed '/match_string1/{
     :1
     N
     /\n.*match_string2/s/\n/; /
     t1
     P
     D
                     }'

スクリプトが行を見つけたら、match_string1パターンに次の行を追加し、追加された行があることを確認します。match_string2その場合は、newline 記号を置き換え;て確認する次の行を追加します。そうでない場合match_string2(置換が発生していない場合)、スクリプトは最初の行を印刷し、2行目から処理を開始します。

おすすめ記事