Pegue os primeiros 10 caracteres de strings em um arquivo fastq

0

estou tentando selecionar de um arquivo fastq apenas os primeiros 10 nucleotídeos das leituras:

Input:

@RONSP:03887:07268
GTAGTTATCTGAAAGGATGCATGGGAAAATTTCAATATTTTTGTATCTGTTGAGGACTTTTTTGTGAGTGACTATATGGTCAATTTTGGAGGATTTGGTACTGAG  
+  
69;::5:<<<<<<3<5<<<;:67717<=0@@9;:5::;;;?-;::::;;;5=;;5:888777)79:::;A;;;<<<<<7<::5:;=/706:5:<=3;5;;;<;;:  

@RONSP:09389:11828 
GTGTGTCTCTGTTCAGTTTCTGCTTCCAGGATCTGTCTCTTGGTGAGAGTGTGGTCTTGAAGTCTCCCAGTATTATTTTATGAGGTGCAATGTGTGCTTTGATCTTTAGCAAAGTGTATTTAATGAATGTGGCTGCTCTTGCATTTAGAGCATAGACATTCAGAATTGAG  
+  
8:::<<<<;<;;5;;:;;1;;?::4:5:;5888::<;<<<6<6<>?;;;;;DD7?=D5<;6<<=<>=4><==<5<<<<0<<<AA7<<;;5=>==<<:::0:<>666+599990999::<<193944.42421443668849:88919;;;;;<<;;<9928;=;5<4:9:  




Output:

@RONSP:03887:07268
GTAGTTATCT 
+  
69;::5:<<<  

@RONSP:09389:11828
GTGTGTCTCT
+  
8:::<<<<;< 

A maioria das ferramentas é cortada a partir do final das leituras. Mas eu preciso apenas dos primeiros 10 nucleotídeos das leituras.

Qualquer ideia é muito apreciada.

    
por fusion.slope 24.02.2017 / 17:47

3 respostas

3
$ sed -E '/^[^@+]/s/^(.{10}).*$//' fastq

Isso executará uma substituição em todas as linhas que não começam com @ ou + . A substituição substituirá a linha inteira apenas pelos 10 primeiros caracteres da linha.

Formulação alternativa:

$ sed -E 's/^([^@+].{10}).*$//' fastq
    
por 24.02.2017 / 18:12
0

awk

awk '{print /^@/ ? $0 : substr($0,1,10)}' file

bash

while IFS= read -r line; do 
    [[ $line == @* ]] && echo "$line" || echo "${line:0:10}"
done < file
    
por 25.02.2017 / 00:00
0

Perl

perl -lpe '/^[@+]/ or $_ = (unpack "A10A*")[0]'  your_fastq_file

Sed

sed -ne '/^[^@+]/s/./&\n/10;P'  your_fastq_file

Bash

dots10=$(yes '.' | head -10 | tr -d '\n')
while IFS= read -r line
do
   case $line in [!@+]* ) expr "$line" : "\($dots10\)";; * ) echo "$line";; esac
done < your_fastq_file
    
por 25.02.2017 / 02:17