2つの列の最初の4文字の間に重複した文字列を含む行を削除する

2つの列の最初の4文字の間に重複した文字列を含む行を削除する

4つの列と7,000行の大容量ファイルがあります。 2番目の列の先頭が4番目の列の先頭と同じ行を削除する必要があります。

入力する:

Gator_locus75   AATTCCATGTACG   Gator_locus23   CTAGAGGAAGT
Gator_locus18   AATTCCATTATGG   Gator_locus14   AATTCAAAAAAT
Gator_locus13   CTAGAACCCACC    Gator_locus72   CTAGAATGTATG
Gator_locus16   AATTCATCCTCT    Gator_locus15   CTAGATTGCCAA
Gator_locus24   CTAGAGCTGCTG    Gator_locus12   AATTCAGTCCAC

出力:

Gator_locus75   AATTCCATGTACG   Gator_locus23   CTAGAGGAAGT
Gator_locus16   AATTCATCCTCT    Gator_locus15   CTAGATTGCCAA
Gator_locus24   CTAGAGCTGCTG    Gator_locus12   AATTCAGTCCAC

2番目の列の文字列が「AATT」で始まり、同じ行の4列目の文字列が「AATT」で始まる行を削除する必要があります。 2番目の列の文字列が「CTAG」で始まり、4番目の列の文字列が「CTAG」で始まる場合でも、同じことを行う必要があります。

答え1

列2の最初の4文字が列4の最初の4文字と等しくない行を印刷するには、次のようにします.

awk 'substr($2, 1, 4) != substr($4, 1, 4)' < input

これは、基本コードを「テスト」として使用して、行を印刷する必要があるかどうかを確認します。基本的な印刷ジョブが私たちが望むものなので、明示的な作業部分はありません。基本コードは、各列から最初の4文字を抽出して比較します。

答え2

2番目のフィールドで始まる行の削除AATT そして4番目のフィールドはAATTで始まり、次のようになりますCATG

awk '($2 !~ /^AATT/ && $4 !~ /^AATT/) && ($2 !~ /^CTAG/ && $4 !~ /^CTAG/) {print}' /path/to/file

より一般的な解決策は次のとおりです。

awk 'substr($2,1,4) != substr($4,1,4) {print}' /path/to/file

関連情報