Por que estou obtendo essa saída do tipo? [fechadas]

0

Estou usando a seguinte cadeia de comandos para classificar um arquivo FASTQ :

cat reads.fq | paste - - - - | sort -k1,1 -S 3G | tr '\t' '\n' > sorted_reads.fq

O arquivo FASTQ é separado em grupos para quatro linhas, a primeira das quais é o ID que queremos classificar.

Mas na saída eu vejo esse padrão:

@ERR894725.10000000/1
AGAAAAAGAAAAATTGTTTCCTGTTATATCCATTTCCTTTAATATAGTTTACAAATTGTGCATTTCAACAGCAGCACTCTGTCCATATGTCTAGCAGACTCCTTAACACACTGTGCTACAACTTCT
+
<B<<B<<<B<<<<<<<B<B<BB<BB<<<<<BB<BB<BB<B<B0<<<<BBB<<BBB<B<B<BB<<B<BB<B<BB0BB<B<B<<<<<<BB<B<BB<BB<B<BBBBBBB0B<B<BBB<B0B<BB<<07<
@ERR894725.100000002/1
AGATAGAGTCTTGCTCTGTCACCCAGCCTGGAGTGCAACGGTGCTATCTCTACTAACTGCAACCTCCGCCCCCCAGGTTCAAGCGATTCTCCTGCCTCAGCCTCCTGAGCAGCTGGGACTACAGTG
+
<<<<<BB<<<B<<BB<B<B<B<BBBBBBB<BBBB<BBB<7BB<BB<<<B<B<<B<B<B<BBB<<B<B7BBBBBBBBBBB<BBBB'B<B<BB<B<BBBBBBBBBBBBB<BBBBBBBBBB<BB<<<<<
@ERR894725.100000002/2
TGTACAGAAAGTATCTGTTTTATTAATTCAACACTGTAAACATTTGCCATGTCTTAAAGTTCAAGTCTCTGTAACCTCCTGAGGTCAGGAGTTTGACATCAGCCTGACCAACATGGTGAAACCCTG
+
<<<<<B<BB<<<<<<B<<<<<<<<<<<<<B<<B<B<<<<<<B<<<<B<B<<<<B<<<<<<<<<<<B<B<B<B<B<BB<BB<BBBB<BBBBBBBB<B<B<<BBBBB<B<BBB<BBBBBBBBB<<<<<
@ERR894725.10000000/2
CTACATAATTTCCCTTACTGGACTAGCTTTTTTTCGGTGCTATTTTAAAATATGTTTAATTCTCCAACTGCTTAGAAGTCTTTTTAGATATTTTGCTGGGTGCAATAGCACACTTTATATCTATAT
+
7B<<B<<<<<B<<<B<<<B<<B<B<<BB<<<<<<<7<B<BB<<<<<<B<<<<<<B<<<<<<<<<<BB<B0<B0<0BBBB<BBBBB<<<<<<BBB<BB<<BB<BBB<BBB0<B<BBBBBBBBB<<7<
@ERR894725.100000003/1
AAAGAGAGCCCGCATTGCCAAGTCAATCCTAAGCCAAAAGAACAAAGCTGGAGGCATCACGCTACCTGACTTCAAATTATACTACAAGGCTACAGTAACCAAAACAGCATGGTACTGGTACCAAAA
+
<<<<B<B<<<<7BB<<<BBBBBB<BB<<BB<BBBBBBBBBBB<BBBBBB<BBBBBB<<B<7B<<<BB<B<BB<BBB<B<<<<B<<BB<BBBB<BBB<B<BBBBB<BBBBBBBBB<BBBBB<B<<<B
@ERR894725.100000003/2
AAATTTTCTCCCATTCTGTAGGTTGCCTGTTCACTCTGATGGTAGTTTCTTTTGCTGTGCAGAAGCTCTTTAGTTTAATTAGAACCCATTTGTCAATTTTGGCTTTTGTTGCCATTGCTTTTGGTG
+
<<<<<<<<B<<<B<<<B<<<<<<<<B<B<<<<B<B<B<B<<<<<B<<<<B<<<<BB<<<BB<<<BBB<B<B<BBBB<B<B<BBB<BBB<BB<B<B<<BBB<BBB<BBBBB<B<0BBBBBBBB<<70

Por que há um intervalo entre o grupo @ERR894725.10000000/1 e o @ERR894725.10000000/2 um? O código ASCII para / é menor que o de qualquer número, por isso não vejo porque @ERR894725.100000002/1 tem precedência sobre @ERR894725.10000000/2 .

Eu vejo o mesmo padrão em todo o arquivo. Há um intervalo entre @ERR894725.10000001/1 e @ERR894725.10000001/1 preenchido por @ERR894725.100000012/1 e @ERR894725.100000012/1 e assim por diante.

Qualquer explicação sobre por que isso está acontecendo e como evitá-lo é bem-vinda.

** Atualização: os dados reais são muito grandes (1TB +) e não podem ser fornecidos na sua totalidade. Eu tentei classificar o exemplo acima usando os mesmos comandos novamente e isso dá um resultado correto. Tentarei recorrer à saída completa já classificada para ver se ela corrige as coisas. Ainda estranho por que isso aconteceu em primeiro lugar.

    
por DarthPaghius 12.06.2018 / 00:26

1 resposta

3

localidade de localidade de localidade

Você obtém resultados inesperados porque sua localidade padrão é diferente de C ou C.UTF-8 .

sort classifica na ordem dos valores de byte apenas na região C; em outras localidades, sort ordena a misteriosa ordem definida por almas bem intencionadas nos arquivos de definição de localidade.

Compare:

$ <<< $'@ERR894725.10000000/1\t1\[email protected]/1\t2\[email protected]/2\t3\[email protected]/2\t4' \
LC_ALL=en_US.UTF-8 sort -s -k1.1
@ERR894725.10000000/1   1
@ERR894725.100000002/1  2
@ERR894725.100000002/2  3
@ERR894725.10000000/2   4

$ <<< $'@ERR894725.10000000/1\t1\[email protected]/1\t2\[email protected]/2\t3\[email protected]/2\t4' \
LC_ALL=C.UTF-8 sort -s -k1.1
@ERR894725.10000000/1   1
@ERR894725.10000000/2   4
@ERR894725.100000002/1  2
@ERR894725.100000002/2  3

Se você valoriza a consistência, sempre diga LC_ALL=C sort (ou LC_ALL=C.UTF-8 sort ou, em geral, LC_ALL= < your-preferred-locale > sort ) e nunca apenas sort .

A página de manual tem isto a dizer:

*** WARNING *** The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values.

    
por 12.06.2018 / 05:12

Tags