使用Bash手动编辑文本或Fastq文件

使用Bash手动编辑文本或Fastq文件,bash,fasta,sequencing,Bash,Fasta,Sequencing,我想使用Bash手动编辑一个Fastq文件,将其编辑成多个类似的行 在Fastq文件中,从第2行开始读取序列,然后每隔第四行(即第2、6、10、14行…)找到一个序列 我想创建一个编辑过的文本文件,它与Fastq文件相同,只是序列读取的前6个字符被删除了 未经编辑的Fastq: @M03017:21:000000000 GAGAGATCTCTCTCTCTCTCT + 111>>B1FDFFF @M03017:21:000000000 TCTCTCTCTCTCTCT + 111>

我想使用Bash手动编辑一个Fastq文件,将其编辑成多个类似的行

在Fastq文件中,从第2行开始读取序列,然后每隔第四行(即第2、6、10、14行…)找到一个序列

我想创建一个编辑过的文本文件,它与Fastq文件相同,只是序列读取的前6个字符被删除了

未经编辑的Fastq:

@M03017:21:000000000
GAGAGATCTCTCTCTCTCTCT
+
111>>B1FDFFF
@M03017:21:000000000
TCTCTCTCTCTCTCT
+
111>>B1FDFFF
编辑的Fastq:

@M03017:21:000000000
GAGAGATCTCTCTCTCTCTCT
+
111>>B1FDFFF
@M03017:21:000000000
TCTCTCTCTCTCTCT
+
111>>B1FDFFF

我想
awk
非常适合:

$ awk 'NR%4==2 {gsub(/^.{6}/,"")} 1' file
@M03017:21:000000000
TCTCTCTCTCTCTCT
+
111>>B1FDFFF
这将删除4k+2位置所有行中的前6个字符

解释
  • NR%4==2{}
    如果记录数(行数)在4k+2表单上,请执行操作
  • gsub(/^.{6}/,“”)
    用空字符串替换前6个字符
  • 1
    计算为真时,打印该行
GNU sed可以做到这一点:

sed -i~ '2~4s/^.\{6\}//' file
地址
2~4
表示“从第2行开始,每4行重复一次”

s
表示替换,
^
匹配行首,
匹配任何字符,
\{6\}
指定长度(“量词”)。替换字符串为空(
/


-i~
替换文件,在文件名后附加
~
作为备份。

奇怪的是,这段代码是有意义的,但当我使用上面的代码行,然后通过管道传输到更多文件或输出到文件时,我得到的是我开始使用的确切文本,没有修剪或错误。知道为什么吗?FWIW我刚刚把它传输到一个新文件,它和stdout是一样的。进行一些调试,比如说
awk'NR%4==2'文件
,看看它是否打印出要替换的行。也许你有一些头文件…运行时确实指向它出现的文件的正确行。这似乎做到了。使用^。。。。。。然后输出到一个文件给我我想要的。谢谢