linux - 如何从 gz 文件中提取特定文本?

标签 linux awk sed grep fastq

我需要从我的 fastq.gz 数据中提取 5 到 11 个字符,这个数据对于在 R 中运行来说太大了。所以我想知道我是否可以直接在 Linux 命令行中执行此操作? fastq 文件如下所示:

@NB501399:67:HFKTCBGX5:1:11101:13202:1044 1:N:0:CTTGTA
GAGGTNACGGAGTGGGTGTGTGCAGGGCCTGGTGGGAATGGGGAGACCCGTGGACAGAGCTTGTTAGAGTGTCCTAGAGCCAGGGGGAACTCCAGGCAGGGCAAATTGGGCCCTGGATGTTGAGAAGCTGGGTAACAAGTACTGAGAGAAC
+
    AAAAA#EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAAEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAE6

@NB501399:67:HFKTCBGX5:1:11101:1109:1044 1:N:0:CTTGTA
TAGGCNACCTGGTGGTCCCCCGCTCCCGGGAGGTCACCATATTGATGCCGAACTTAGTGCGGACACCCGATCGGCATAGCGCACTACAGCCCAGAACTCCTGGACTCAAGCGATCCTCCAGCCTCAGCCTCCCGAGTAGCTGGGACTACAG
+

而我只想提取位于序列部分的第5到11个字符(第一个是TNACGG,第二个是CNACCT)并将其制成一个新的txt文件。我可以这样做吗?

最佳答案

您可以将 GNU sed 与 zcat 一起使用:

zcat fastq.gz | sed -n '2~5{s/.\{4\}\(.\{6\}\).*/\1/;p}'
  • -n 表示默认不打印行
  • 2~5 表示从第 2 行开始,每五行匹配一次
  • 当“地址”匹配时,替换记住\1中的第五到第十个字符并用它替换整行,p打印结果

关于linux - 如何从 gz 文件中提取特定文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53780349/

相关文章:

regex - 使用 awk 进行字符串匹配

bash:对文件的各个部分进行排序

regex - Linux sed - 删除不以特定字符开头的单词

linux - 主机 key 验证失败。甲骨文11g

python - 看门狗模块不通知目录重命名?

regex - 仅删除特定行的换行符/换行符

regex - 使用 sed 在特定行后添加换行符

c - 在 Linux 中 "which source"什么都不返回?

c++ - 简单的 C++ OpenCV imshow 示例因段错误而崩溃

regex - Bash 从字符串中删除第一个和/或最后一个字符,但前提是它是某个字符