首页 > 解决方案 > 如何在特定行的末尾剪切 20 个字符,同时在 bash 的输出中保持所有其他行不变

问题描述

所以我有一个看起来像这样的 FASTA 文件,我将其拆分为 2 行文件

\>H.Sapiens.1M.Illumina.low.000000000/1
CTCCTTGCCTCATCCTCCCAAATAGCATGCACCACCACGCGCAGCTAATTT
\>H.Sapiens.1M.Illumina.low.000000000/2
AGGCTGAGATAAGAATATAATAGGACAAAAAACAAGATTTTCAGTTTCAAA
\>H.Sapiens.1M.Illumina.low.000000001/1
AGATAGCCCTTCAAAGGAGTTTCATCATCTTTACGGGAGGTTATCTAACAA
\>H.Sapiens.1M.Illumina.low.000000001/2
TTAAGATTTCGAGGAGTCAAAAGGTGTATGTGGACTTTCAACTGCAGGGGG

还有一个 FASTQ 文件,我将其拆分为 4 行文件

@H.Sapiens.1M.Illumina.l100.low.000000000/1
CTCCTTGCCTCATCCTCCCAAATAGCATGCACCACCACGCGCAGCTAATTT
+
KGOLHSAHTEFKMLGJPENFEGMIDAHKMIJFIEIHKCFCGHEGMJGHHPH
@H.Sapiens.1M.Illumina.l100.low.000000000/2
AGGCTGAGATAAGAATATAATAGGACAAAAAACAAGATTTTCAGTTTCAAA
+
IHHHIIIIHHIHHIHIIHHGFKGGIHGJGEIIFEEGIBHJKKJJIJJEJJF

我需要一个 bash 脚本,它可以在 FASTA 的第二行末尾剪切 20 个字符,在 FASTQ 的第二行和第四行末尾剪切 20 个字符,同时在输出中保持其余行不变。我怎么能做到?

标签: bashbioinformaticsfastafastq

解决方案


在 GNU sed 中,您可以使用~指定每 n 行的地址:

sed '2~2 s/\(.*\).\{20\}/\1/' file

命令的意思

  • 2~2从第 2 行开始,每 2 行申请一次
  • s/PATTERN/REPLACE/是替代品
  • .\{20\}匹配 20 个字符
  • \(.*\)记住 20 个字符之前的任何字符
  • \1是第一个记住的组

推荐阅读