桑达。删除多行模式。正则表达式

时间:2015-01-19 09:24:59

标签: regex bash awk sed grep

我有严格格式化的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,您将看到描述我要删除的行的表达式。

2 个答案:

答案 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:]]*

相关问题