bash - 如何在特定行的末尾剪切 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 个字符,同时在输出中保持其余行不变。我怎么能做到?
解决方案
在 GNU sed 中,您可以使用~
指定每 n 行的地址:
sed '2~2 s/\(.*\).\{20\}/\1/' file
命令的意思
2~2
从第 2 行开始,每 2 行申请一次s/PATTERN/REPLACE/
是替代品.\{20\}
匹配 20 个字符\(.*\)
记住 20 个字符之前的任何字符\1
是第一个记住的组
推荐阅读
- azure-active-directory - 无法从 ROPC 访问 power bi api
- google-chrome - 如何在基于 Chromium 的浏览器中查看下载错误日志?
- reactjs - 如何配置 React 以将登录表单包与主代码分开?
- r - 为什么 str_replace_all 没有替换 R 中的字符串?
- node.js - Sveltekit - 500 进程未定义或导出未定义
- c# - 当今天更改为第二天时,如何在asp.net中触发事件?
- performance - Selenium webdriver 需要 25 分钟来识别并单击一个元素
- r - 在 gt 中的行组行上重复列标签
- redis - 如何在 ubuntu 服务器 18.04 上将 redis 作为服务激活
- c++ - 关于作为类成员的对象