我需要从我的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文件。我可以这样做吗?
答案 0 :(得分:3)
您可以将GNU sed与zcat一起使用:
zcat fastq.gz | sed -n '2~5{s/.\{4\}\(.\{6\}\).*/\1/;p}'
-n
表示默认情况下不打印行2~5
表示从第2行开始,每5行匹配一次 \1
中的第五到第十个字符,并用它替换整行,p
打印结果答案 1 :(得分:3)
另一个使用zgrep
并向后看的人:
$ zgrep -oP "(?<=^[ACTGN]{4})[ACTGN]{6}" foo.gz
TNACGG
CNACCT
解释:
zgrep
:man zgrep
:搜索可能的压缩文件以查找正则表达式 -o
仅打印匹配行的匹配(非空)部分 -P
将模式解释为与Perl兼容的正则表达式(PCRE)。 (?<=^[ACTGN]{4})
令人反感[ACTGN]{6}
匹配上面的6个命名字符foo.gz
我的测试文件答案 2 :(得分:3)
$ zcat fastq.gz | awk '(NR%5)==2{print substr($0,5,6)}'
TNACGG
CNACCT