首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux只读取第一行文件

Linux只读取第一行文件
EN

Stack Overflow用户
提问于 2022-11-19 16:05:12
回答 1查看 40关注 0票数 1

我试图在一个类似于这样的文件中替换头部:

中华蜜蜂

NC_037638.1 DH4连锁群LG1 Amel_HAv3.1全基因组猎枪序列

文件(Bee.fasta)有几个头部(每个序列一个),标题如下所示:

蜜蜂

NC_037638.1 DH4连锁群LG1 Amel_HAv3.1全基因组猎枪序列

我想把它们变成这样:

LG1

代码语言:javascript
复制
*LG1 is just an example, depending on the line of the file it can be LG1, LG2, LG3, ...

上面的代码每次迭代只更改第一个标头,而后一个头则保持不变。

(预先谢谢:)

我试图用以下代码替换文件中的头文件:

代码语言:javascript
复制
#!/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

上面的代码每次迭代只更改第一个标头,而后一个头则保持不变。

EN

回答 1

Stack Overflow用户

发布于 2022-11-19 20:13:27

你想得太多了。另外,使用bash在一行文本上循环使用bash几乎总是一个坏主意,从性能上讲。像sedawkperl这样的工具就是为这个工作而诞生的(文本处理)。

因为我们知道,单词group只能出现在标题中,而不能出现在基因序列中,Jason的注释中的sed应该满足您的要求。

代码语言:javascript
复制
$ 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
$
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74501569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档