次の条件と一致しますが、両方の条件がtrueの場合にのみ行を印刷するように、以下のコードをどのように変更できますか?
抽出する必要がある行は、次の基準を満たす必要があります。
つまり、パターンb条件を満たす行が見つかると、パターンaと一致する行のみが印刷されます。
awk '/patterna/ || /patternb/ { print > "patternapatternb.txt" }' inputfile
入力ファイル
モードaこの
モードb対応
モードa
異なる
モード
モードa異なるこの
モードb異なるモード
出力パターンapatternb.txt:
パターンaこの
パターンbその
パターンa別のこのパターンnb
別のパターン
各ペアの出力を異なるファイルに書き込むことができるように、マルチペアモードでこれを実装する方法
ベストアンサー1
awk
各レコードを別々に処理します(デフォルトではレコードは行です)。隣接する行に条件を適用するには、この関数をgetline
使用して次のレコードを読み取り、2番目のパターンについてテストできます。
awk '/patterna/ {
a=$0
if (getline > 0 && $0 ~ /patternb/) {
print a
print
}
}' inputfile
あるいは、以下を使用することを検討することができます。sed
sed -n '/patterna/ {$!N; /\npatternb/p}' inputfile
と/patternb/
一致するたびに最初の一致を印刷するには、前にを入力して次のようにします。/patterna/
/patterna/
状態を保存パーサーは、一致する項目ごとにフラグを設定し、一致する項目ごとにフラグを設定解除すること/patterna/
によってこれを行います/patternb/
。
awk '
/patterna/ {
a=1; lasta=$0; next;
}
/patternb/ && a==1 {
a=0; print lasta; print;
}' inputfile