awk - 2つの連続した行にまたがる複数の文字列一致条件

awk - 2つの連続した行にまたがる複数の文字列一致条件

私はawk次のような単純な1行のバリエーションを開発しようとしています(現在のファイルの各行で複数の条件を一致させるのに役立ちます)。

awk "{ if ($1 == $3 && $2 == $7) print $1,$2}" input.txt > out.txt

必要な変更は、単一行ではなく連続した2行のすべてのインスタンスを調べることです。したがって、最初の行がAで、2番目の行がBの場合、次のようになります。

awk "{ if (A$1 == B$3 && A$2 == B$7) print A$1,B$1,A$2,B$2}" input.txt > out.txt

そんなこと!入力ファイルの例は次のとおりです。

banana apple orange pumpkin potato tomato onion garlic
banana apple banana pumpkin potato tomato onion garlic
lemon grape banana pumpkin potato tomato apple garlic
banana apple orange pumpkin potato tomato onion garlic

2行目と3行目を一致させ、以下を出力します。

banana lemon apple grape

私はこれができると確信しており、awkここで関連する質問と回答で必要と思われるコンポーネントを見ましたが、実際には正しくコンパイルするスキルはありません。

ベストアンサー1

前の行のフィールドを配列に保存aし、プレフィックスがNormalの現在の行のフィールドにアクセスできます$

awk '
 a[1]==$3 && a[2]==$7{ print a[1],$1,a[2],$2 }
 { for (i=1;i<=NF;i++) a[i]=$i }
' input.txt > out.txt

おすすめ記事