진주

진주

fastq 파일에서 처음 10개의 읽기 뉴클레오티드만 선택하려고 합니다.

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:::<<<<;< 

대부분의 도구는 읽기가 끝날 때부터 트리밍을 시작합니다. 하지만 읽기의 처음 10개 뉴클레오티드만 필요합니다.

어떤 아이디어라도 대단히 감사하겠습니다.

답변1

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

@이는 또는 로 시작하지 않는 모든 줄에서 교체를 수행합니다 +. 바꾸기는 전체 줄을 줄의 처음 10자로만 바꿉니다.

대체 레시피:

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

답변2

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

세게 때리다

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

답변3

진주

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

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

불다

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

답변4

이것이 오래된 질문이라는 것을 알고 있지만 제안된 해결 방법을 따르는 데 문제가 있습니다. fastq 파일의 품질 값에는 @ 또는 + 문자가 포함될 수 있으므로 이러한 품질 값 줄은 때때로 이러한 문자로 시작될 수 있습니다.

내 제안은 모든 짝수 줄의 처음 10자를 취하는 것입니다.

sed -E 'n; s/^(.{10}).*$/\1/' fastq

관련 정보