首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从以特定字符开始的行中移除子字符串。

从以特定字符开始的行中移除子字符串。
EN

Stack Overflow用户
提问于 2022-11-28 15:06:06
回答 4查看 41关注 0票数 1

我试图在行中更改以>开头的长名称,以便只保留该部分直到Stage_V_sporulation_protein...

代码语言:javascript
复制
>tr_A0A024P1W8_A0A024P1W8_9BACI_Stage_V_sporulation_protein_AE_OS=Halobacillus_karajensis_OX=195088_GN=BN983_00096_PE=4_SV=1
MTFLWAFLVGGGICVIGQILLDVFKLTPAHVMSSFVVAGAVLDAFDLYDNLIRFAGGGATVPITSFGHSLLHGAMEQADEHGVIGVAIGIFELTSAGIASAILFGFIVAVIFKPKG
>tr_A0A060LWV2_A0A060LWV2_9BACI_SpoIVAD_sporulation_protein_AEB_OS=Alkalihalobacillus_lehensis_G1_OX=1246626_GN=BleG1_2089_PE=4_SV=1
MIFLWAFLVGGVICVIGQLLMDVVKLTPAHTMSTLVVSGAVLAGFGLYEPLVDFAGAGATVPITSFGNSLVQGAMEEANQVGLIGIITGIFEITSAGISAAIIFGFIAALIFKPKG

我正在做一个循环:

代码语言:javascript
复制
cat file.txt | while read line; do 
  if [[ $line = \>* ]] ; then
    cut -d_ -f1-4 $line; 
  fi; 
done

但是在地址文件中,而不是在文件中的行(我得到cut: >>tr_A0A024P1W8_A0A024P1W8_9BACI_Stage_V_sporulation_protein_AE_OS=Halobacillus_karajensis_OX=195088_GN=BN983_00096_PE=4_SV=1: No such file or directory)。

我想要的输出是:

代码语言:javascript
复制
>tr_A0A024P1W8_A0A024P1W8_9BACI        
MTFLWAFLVGGGICVIGQILLDVFKLTPAHVMSSFVVAGAVLDAFDLYDNLIRFAGGGATVPITSFGHSLLHGAMEQADEHGVIGVAIGIFELTSAGIASAILFGFIVAVIFKPKG
>tr_A0A060LWV2_A0A060LWV2_9BACI        
MIFLWAFLVGGVICVIGQLLMDVVKLTPAHTMSTLVVSGAVLAGFGLYEPLVDFAGAGATVPITSFGNSLVQGAMEEANQVGLIGIITGIFEITSAGISAAIIFGFIAALIFKPKG

如何更改实际行?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-11-28 15:21:02

在目前的问题状态下,似乎最容易做到:

代码语言:javascript
复制
awk '/^>/ {print $1,$2,$3,$4; next}1' FS=_ OFS=_ file.txt

在行的开头与>匹配的行只得到打印的前四个字段,由_ (OFS的值)分隔。不匹配的行打印不变。

票数 1
EN

Stack Overflow用户

发布于 2022-11-28 15:13:48

使用sed的一种方法

代码语言:javascript
复制
sed -E '/^>/s/(.*)_Stage_V_sporulation_protein/\1/' file
票数 1
EN

Stack Overflow用户

发布于 2022-11-28 15:15:14

一条sed单线线将是:

代码语言:javascript
复制
sed '/^>/s/^\(\([^_]*_\)\{3\}[^_]*\).*/\1/' file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74602571

复制
相关文章

相似问题

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