条件付きで交互に印刷

条件付きで交互に印刷

まだ複雑なログファイルのために問題が発生しています。私が望むのは、最初に文字列Xに一致する行を検索し、次に文字列Yに一致する行を見つけることです。それでは一緒に印刷したいです。問題は時々XはあるがYはないということです。

入力例

31 X
32 Y
33 X
34 Y
35 X
36 X
37 Y
38 X
39 X

期待される出力

31 X
32 Y
33 X
34 Y
36 X
37 Y

したがって、行35、38、39は文字列Yがないため省略されます。

私の出発点は次のとおりです。

cat $filename | grep -E X\|Y | grep -A1 'X'

ただし、これは行35、38、39をフィルタリングしません。私が望むのは条件です。 Yがある場合は、X行のみを印刷してからY行を印刷します。それ以外の場合は何も印刷されません。

ベストアンサー1

使用sed:

sed -n ':b /X/ { h; n; /Y/! b b; H; x; p; }'

出力:

31 X
32 Y
33 X
34 Y
36 X
37 Y

おすすめ記事