赛德。删除多行模式。正则表达式

Sed. remove multiline patterns. RegExp

我有严格格式的 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############### 

在上次 中,我解决了我的问题。但是我没有正确理解文件格式。我需要从输入文件中获取此文件:

输出:

@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. By this link 您将看到描述我要删除的行的表达式。

通过 perl。

$ perl -0777pe 's/[GATC]+\h*\n\K\+.*?[GATC]+\n//gs' file
@HWI-ST383:199:D1L73ACXX:3:1101:1309:1956 1:N:0:ACAGTGA 
GATCTCGAAGCAAGAGTACGACGAGTCGGGCCCCTCCA 
+ 
IIIIFFF<?6?FAFEC@=C@1AE############### 

但这会保留最后的空格。如果您还想删除尾随空格,请尝试以下操作。

$ perl -0777pe 's/[GATC]+\K\h*\n\+.*?[GATC]+\n/\n/gs' file
@HWI-ST383:199:D1L73ACXX:3:1101:1309:1956 1:N:0:ACAGTGA
GATCTCGAAGCAAGAGTACGACGAGTCGGGCCCCTCCA 
+ 
IIIIFFF<?6?FAFEC@=C@1AE############### 
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.
  }
}

听起来你只需要:

$ 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###############

即只需删除以“@”开头的任何字符串 ((^|\n)@) 然后是一堆非换行符 ([^\n]+) 然后是换行符之间的 + (\n\+\n) 然后是一堆其他非换行符以换行符结尾 ([^\n]+\n)。如果任何行可以有前导或尾随白色space,那么只要在可能出现白色space的地方抛出一个[[:blank:]]*