最初の行を保持し、すべての段落の内容をすべて削除します(特定のパターンまで)。

最初の行を保持し、すべての段落の内容をすべて削除します(特定のパターンまで)。

このようなデータを含むログファイルがあります。

criteria (NO-NO) data/speed/profile_1
    someting something useless data
    something something useless data
    more useless data
        Old run: exit speed=22.5
        Old run: ramp speed=15.2
        New run: exit speed=28.2
        New run: ramp speed=19.3

criteria (NO-NO) data/speed/profile 3
    someting something useless data
    something something useless data
    more useless data
        Old run: exit speed=25.3
        Old run: ramp speed=18.6
        New run: exit speed=29.5
        New run: ramp speed=17.9

これが私が望む結果です:

criteria (NO-NO) data/speed/profile_1
        Old run: exit speed=22.5
        Old run: ramp speed=15.2
        New run: exit speed=28.2
        New run: ramp speed=19.3

criteria (NO-NO) data/speed/profile 3
        Old run: exit speed=25.3
        Old run: ramp speed=18.6
        New run: exit speed=29.5
        New run: ramp speed=17.9

私はawk 'NR==1||c-->0;/^$/{c=1}' logs.txt各段落の最初の行を取得し、「Ref」という単語の前の内容をすべて削除しましたが、タブsed 's/^.*\(Ref\)/\1/' logs.txt文字のみを削除しました。希望の出力を得るためにすべてを組み合わせる方法がわかりません。

答え1

次の状態保存操作を実行できます。

/first-pattern/ {print; p = 0} /second-pattern/ {p = 1} p

前任者。

$ awk '/^criteria/ {print; p = 0} /(Old|New) run:/ {p = 1} p' file.log
criteria (NO-NO) data/speed/profile_1
        Old run: exit speed=22.5
        Old run: ramp speed=15.2
        New run: exit speed=28.2
        New run: ramp speed=19.3

criteria (NO-NO) data/speed/profile 3
        Old run: exit speed=25.3
        Old run: ramp speed=18.6
        New run: exit speed=29.5
        New run: ramp speed=17.9

答え2

公開した入力/出力の例を考慮すると、必要なものは次のとおりです。

$ grep -v '^    [^ ]' file
criteria (NO-NO) data/speed/profile_1
        Old run: exit speed=22.5
        Old run: ramp speed=15.2
        New run: exit speed=28.2
        New run: ramp speed=19.3

criteria (NO-NO) data/speed/profile 3
        Old run: exit speed=25.3
        Old run: ramp speed=18.6
        New run: exit speed=29.5
        New run: ramp speed=17.9

これが必要なものでない場合は、質問を編集してより代表的な入力/出力の例を提供してください。

答え3

範囲演算子を使用するGnu sedはこの場合に適しています。

$ sed -Ee '
    /^criteria/,/^$/!d
    //b
    /(Old|New) run:/!d
' file

答え4

次のコマンドを試してください

awk '/criteria/||/:/{print $0}' filename

関連情報