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