我试图在一个类似于这样的文件中替换头部:
中华蜜蜂
NC_037638.1 DH4连锁群LG1 Amel_HAv3.1全基因组猎枪序列
文件(Bee.fasta)有几个头部(每个序列一个),标题如下所示:
蜜蜂
NC_037638.1 DH4连锁群LG1 Amel_HAv3.1全基因组猎枪序列
我想把它们变成这样:
LG1
*LG1 is just an example, depending on the line of the file it can be LG1, LG2, LG3, ...上面的代码每次迭代只更改第一个标头,而后一个头则保持不变。
(预先谢谢:)
我试图用以下代码替换文件中的头文件:
#!/bin/bash
grep 'LG' Be.fasta > old_headers.txt
while read header
do
new_header=$(echo $header | awk -F ' ' '{print $8}')
sed "s/$header/$new_header/g" Bee.fasta >> somefile.txt
done < old_headers.txt上面的代码每次迭代只更改第一个标头,而后一个头则保持不变。
发布于 2022-11-19 20:13:27
你想得太多了。另外,使用bash在一行文本上循环使用bash几乎总是一个坏主意,从性能上讲。像sed、awk和perl这样的工具就是为这个工作而诞生的(文本处理)。
因为我们知道,单词group只能出现在标题中,而不能出现在基因序列中,Jason的注释中的sed应该满足您的要求。
$ cat Bee.fasta
NC_037638.1 Apis mellifera strain DH4 linkage group LG1, Amel_HAv3.1, whole genome shotgun sequence
GAGAGAATTAACTACCTTAACCTGAACCTAAACCTACCGATAACCTAACTCTAAACTATACCTTTAACCCCTAAACCCTA CACCTAAGTCCTAAACCAATAACCTTAACCCTAACAACTATATAAAACACTAACCTATAACCTAATCCCCTAACTACTAA ActactaacctaacctaaaactatatacctaacctaaaccttaCCCTAACCATAACCTATTACTCTAACCCTACCAAGAG CCTAAACCTAGAAACTTAACCCCTACAACCCTTAACCTTAACCTACACCTAACTACCTAATCCTACCTAACCtataccta
$ sed -E 's/^.*group *([^,]+).*$/\1/g' Bee.fasta > somefile.txt
$ cat somefile.txt
LG1
GAGAGAATTAACTACCTTAACCTGAACCTAAACCTACCGATAACCTAACTCTAAACTATACCTTTAACCCCTAAACCCTA CACCTAAGTCCTAAACCAATAACCTTAACCCTAACAACTATATAAAACACTAACCTATAACCTAATCCCCTAACTACTAA ActactaacctaacctaaaactatatacctaacctaaaccttaCCCTAACCATAACCTATTACTCTAACCCTACCAAGAG CCTAAACCTAGAAACTTAACCCCTACAACCCTTAACCTTAACCTACACCTAACTACCTAATCCTACCTAACCtataccta
$https://stackoverflow.com/questions/74501569
复制相似问题