我有一个Fasta序列列表,如下所示:
>Product_1_001:299:H377WBGXB:1:11101 TGATCATCTCACCTACTAATAGGACGATGACCCAGTGACGATGA >Product_2_001:299:H377WBGXB:2:11101 CATCGATGATCATTGATAAGGGGCCCATACCCATCAAAACCGTT
原始的fasta序列比此处发布的子集长得多。我想将模式“ TCAT”之后的10个字符提取到一个单独的文件中,然后执行
grep -oP "(?<=TCAT).{10}"
我确实得到了所需的结果,
CTCACCTACT TGATAAGGGG
我希望将其对应的Fasta ID作为一列,将提取的模式作为第二列,如:
>Product_1_001:299:H377WBGXB:1:11101 CTCACCTACT >Product_2_001:299:H377WBGXB:2:11101 TGATAAGGGG
答案 0 :(得分:2)
尝试这种单线模式
perl -lne ' /^[^<].+?(?<=TCAT)(.{10})/ and print $p,"\t",$1; $p=$_ ' file
使用您给定的输入
$ cat fasta.txt
>Product_1_001:299:H377WBGXB:1:11101
TGATCATCTCACCTACTAATAGGACGATGACCCAGTGACGATGA
>Product_2_001:299:H377WBGXB:2:11101
CATCGATGATCATTGATAAGGGGCCCATACCCATCAAAACCGTT
$ perl -lne ' /^[^<].+?(?<=TCAT)(.{10})/ and print $p,"\t",$1; $p=$_ ' fasta.txt
>Product_1_001:299:H377WBGXB:1:11101 CTCACCTACT
>Product_2_001:299:H377WBGXB:2:11101 TGATAAGGGG
$
答案 1 :(得分:0)
另一种方式是使用awk
这样的命令:
cat <your_file>| awk -F"_" '/Product/{printf "%s", $0; next} 1'|awk -F"TCAT" '{ print substr($1,1,35) "\t" substr($2,1,10)}'
输出:
Product_1_001:299:H377WBGXB:1:11101 CTCACCTACT
Product_2_001:299:H377WBGXB:2:11101 TGATAAGGGG
希望它能对您有所帮助。