删除第二个下划线之后的所有内容

删除第二个下划线之后的所有内容

我想删除第二个下划线之后的所有文本(包括下划线本身),但不是每一行。每条目标行均以模式 (>gi_) 开头。

例子。

输入

>gi_12_pork_cat

ACGT

>gi_34_pink_blue

CGTA

输出

>gi_12

ACGT

>gi_34

CGTA

答案1

对于我们当中的懒人:

cut -d_ -f1,2 input

给我们:

bash-[514]$ cat input
>gi_12_pork_cat   
ACGT
>gi_34_pink_blue    
CGTA

bash-[515]$ cut -d_ -f1,2 input
>gi_12
ACGT    
>gi_34
CGTA

答案2

还有一个简写使用awk

awk -F_ '{print $1 (NF>1? FS $2 : "")}' yourfile

答案3

$ awk -F_ 'BEGIN {OFS="_"} /^>gi/ {print $1,$2} ! /^>gi/ {print}' input
>gi_12
ACGT
>gi_34
CGTA

答案4

sed -ne '/^>gi_/s/_/\n/2;P' yourfile

解释

  • 仅对于以字符串开头的行>gi_,我们才尝试影响 sub _ ---> \n。然后,我们使用命令打印模式空间,P如果找到一个或整个换行符,该命令将打印到第一个换行符。

相关内容