ファイルを繰り返して、awk文で各行を新しい正規表現にするにはどうすればよいですか?

ファイルを繰り返して、awk文で各行を新しい正規表現にするにはどうすればよいですか?

ファイルA.txt:

ATGCATGC 
GGGGGGTT
TTTTT
AAAA

ファイルB.txt:

asdfasdf
blah2
ATGCATGC
blah3
blah4 
delte-me-too
GGGGGGTT
blah5
blah5
....

FileA.txtの各行を比較してFileB.txtにあることを確認したいと思います。 FileBにいる場合は、以下を削除したいと思います。

  1. 一致する線

  2. ライン上

  3. 次の2行

新しいファイルに出力します。

注:FileAには500,000行があります。スキーマをハードコードしない方法でこれを実行したいと思います。

現在、この行を削除することがありますが、FileAを繰り返してこのawk式の新しいパターンを作成するのは混乱しています。

awk '/$VARIABLE_REGEX/{for(x=NR-2;x<=NR+2;x++)d[x];} {a[NR]=$0}
END{for(i=1;i<=NR;i++)
    if(!(i in d))
        print a[i]}' FileB.txt

ベストアンサー1

注:エラーチェックはありません。また、2番目のファイルの入力が言及されたパターンに正確に従うと仮定します。

awk 'NR== FNR {a[$0] = $0 ; next } {if (!($0 in a)) {b[count++] = $0; } else {count--; if (count > 0) delete b[count];getline;getline; }} END {for (i=0; i<count; i++) print b[i] }' 1 2

1と2を入力してください。

1

ATGCATGC
GGGGGGTT
TTTTT
AAAA

2

asdfasdf
blah2
ATGCATGC
blah3
blah4 
delte-me-too
GGGGGGTT
blah5
blah5
foo
foo-delete
AAAA
bar-delete
bar-delete
bar-ok

出力

asdfasdf
foo
bar-ok

おすすめ記事