IFS=$'\n'
gzip -dc file.gz | grep -v '^>' | grep -Foe "${tri[*]}" | sort | uniq -c
Mas, a propósito, AAAC
corresponde a AAA
e AAC
, mas grep -o
produzirá apenas uma delas. É isso que você quer? Além disso, quantas ocorrências de AAA
em AAAAAA
? 2 ou 4 ( [AAA]AAA
, A[AAA]AA
, AA[AAA]A
, AAA[AAA]
)?
Talvez você queira:
gzip -dc file.gz | grep -v '^>' | fold -w3 | grep -Fxe "${tri[*]}" | sort | uniq -c
Isso é dividir as linhas em grupos de 3 caracteres e contar as ocorrências como linhas inteiras (encontraria 0 ocorrência de AAA
em ACAAATTCG
(como ACA AAT TCG
)).
Ou, por outro lado:
gzip -dc file.gz | awk '
BEGIN{n=ARGC;ARGC=0}
!/^>/ {l = length - 2; for (i = 1; i <= l; i++) a[substr($0,i,3)]++}
END{for (i=1;i<n;i++) printf "%s: %d\n", ARGV[i], a[ARGV[i]]}' "${tri[@]}"
(encontraria 4 ocorrências de AAA
em AAAAAA
).