私は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