我有严格格式化的fastq文件。
输入文件:
@HWI-ST383:199:D1L73ACXX:3:1101:1309:1956 1:N:0:ACAGTGA
+
JJJHIIJFIJJJJ=BFFFFFEEEEEEDDDDDDDDDDBD
@HWI-ST383:199:D1L73ACXX:3:1101:3437:1952 1:N:0:ACAGTGA
GATCTCGAAGCAAGAGTACGACGAGTCGGGCCCCTCCA
+
IIIIFFF<?6?FAFEC@=C@1AE###############
在我的上一篇question中,我解决了我的问题。但我没有正确理解文件格式。我需要从输入文件中获取此文件:
输出:
@HWI-ST383:199:D1L73ACXX:3:1101:3437:1952 1:N:0:ACAGTGA
GATCTCGAAGCAAGAGTACGACGAGTCGGGCCCCTCCA
+
IIIIFFF<?6?FAFEC@=C@1AE###############
我删除不包含序列的读取。
此脚本可正常运行。但我不会写正则表达式来得到你想要的东西
awk '/\n[GATC]*\n/' RS=+ ORS=+
在脚本工作之后,我希望看到这个output file。通过此link,您将看到描述我要删除的行的表达式。
答案 0 :(得分:1)
sed '/^@H/ { N; /\n+$/ { N; d } }' filename
其工作原理如下:
/^@H/ { # if the current line begins with @H
N # fetch the next one, append it.
/\n+$/ { # if the combined pattern has \n+ at the end (that is, if the new
# line is "+")
N # fetch another line
d # and discard the lot.
}
}
答案 1 :(得分:0)
听起来你只需要:
$ awk -v RS= '{gsub(/(^|\n)@[^\n]+\n\+\n[^\n]+\n/,"")}1' file
@HWI-ST383:199:D1L73ACXX:3:1101:3437:1952 1:N:0:ACAGTGA
GATCTCGAAGCAAGAGTACGACGAGTCGGGCCCCTCCA
+
IIIIFFF<?6?FAFEC@=C@1AE###############
即。只需删除任何以&#34; @&#34;开头的字符串; ((^|\n)@
)然后是一堆非换行字符([^\n]+
),然后是换行符之间的+
(\n\+\n
),然后是一堆其他非换行字符换行符([^\n]+\n
)。如果任何行可以有前导或尾随空格,那么只需在可能出现空格的地方抛出[[:blank:]]*
。