正規表現のためのawkとegrep

正規表現のためのawkとegrep

私はUnixに初めて触れました!

fastqファイルに3つ以上のAsが連続して含まれる読み取り数は何ですか?

egrep 'A{3}' を使用して、AAA が何人かを教えてくれます。しかし今はAAA連続3つ以上を知りたいです。ただし、> =は機能しません。これを決定するためにawkを使用できますか?

また、正規表現を使用して4つ以上のAの後にT以外の項目がある読み取り数を確認するにはどうすればよいですか? (GCまたはA)したがって、Aは> = 4でなければならず、次にGCorAになる必要があります。

編集:連続して3Aと言うと、次のような意味です。 GGCTAAAAAACGGAT

答え1

3つ以上の場合は、次のものをa使用できますa{3,}。たとえば、

$ echo a | grep -E 'a{3,}'
$ echo aa | grep -E 'a{3,}'
$ echo aaa | grep -E 'a{3,}'
aaa
$ echo aaaa | grep -E 'a{3,}'
aaaa
$ echo aaaaaaaaaa | grep -E 'a{3,}'
aaaaaaaaaa

3つ以上のasの後にa以外の項目がある場合は、次のようにt使用できます。a{3,}[^t]

$ echo aaa | grep -E 'a{3,}[^t]'
$ echo aaat | grep -E 'a{3,}[^t]'
$ echo aaax | grep -E 'a{3,}[^t]'
aaax

ただし、anはaaではないtため、 'aaaa'などの項目と一致し、その後aにa以外の文字が続きますt(この場合a)。

$ echo aaaa | grep -E 'a{3,}[^t]'
aaaa

a文字列がisでもなくisでもないで終わるようにするには、次のようにしtますa{3,}[^at]。たとえば、

$ echo aaaa | grep -E 'a{3,}[^ta]'
$ echo aaaaaaaa | grep -E 'a{3,}[^ta]'
$ echo aaaaaaaattt | grep -E 'a{3,}[^ta]'
$ echo aaaaaaaab | grep -E 'a{3,}[^ta]'
aaaaaaaab

答え2

3 つ以上のシーケンス数を印刷するには、A次のようにします。

awk '{print gsub (/AAAA*/, "&")}' file
3
4
4
1

2番目のリクエストの場合は、上記の内容を編集してください。

awk '{print gsub (/AAAAA*[CG]/, "&")}' file

「Followed by A」はA *パターンで上書きされました。

答え3

fastqファイルに3つ以上のAsが連続して含まれる読み取りは何ですか?

fastq形式のファイルなので、正確な数を得るには、すべての行ではなく実際のシーケンス行のみを表示する必要があります。変数を使用して各4行シーケンスブロックの2行目に一致を制限することでNRこれを達成できます。

awk 'NR%4 == 2 && /AAA/ { count++ } END { print count+0 }' foo.fastq

4つ以上のAとT以外の項目に続く読み取りは何回実行されましたか? (GCまたはA)

awk 'NR%4 == 2 && /AAAA([^T]|$)/ { count++ } END { print count+0 }' foo.fastq

AAAAAT(4つのAとその後に別のAがあるので一致します。)

関連情報