このようなデータを含むログファイルがあります。
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