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

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

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

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

おすすめ記事