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