awk は 2 つのパターンに一致する行を抽出し、どちらも真です。

awk は 2 つのパターンに一致する行を抽出し、どちらも真です。

次の条件と一致しますが、両方の条件が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

おすすめ記事