Bash 删除两个字符串之间的文本sed,awk

Bash 删除两个字符串之间的文本sed,awk,bash,awk,sed,substitution,Bash,Awk,Sed,Substitution,我在寻找解决办法,但找不到合适的办法 我想删除每行两个字符串之间的所有字符 输入是一个Fasta文件: >CAM_P0000101_READ_00457523 /accession=CAM_P0000101_READ_00457523 /xy=2625_3790 /region=2 /run=R_2008_08_11_16_51_31_ /length=253 /sample_id=1309720343513924875 /sample_acc=CAM_P0000101_SMPL_PAPU

我在寻找解决办法,但找不到合适的办法

我想删除每行两个字符串之间的所有字符

输入是一个Fasta文件:

>CAM_P0000101_READ_00457523 /accession=CAM_P0000101_READ_00457523 /xy=2625_3790 /region=2 /run=R_2008_08_11_16_51_31_ /length=253 /sample_id=1309720343513924875 /sample_acc=CAM_P0000101_SMPL_PAPUT2 /sample_name=CAM_P0000101_SMPL_PAPUT2 /site_id_n=CAM_P0000101_SITE_PAPUT2
GTGCCTTCGGGAACCGGGTGACAGGTGCTGCATGGCTGTCGTCAGCTCGTGTCGTGAGATGTTGGGTTAAGTCCCGTAACGAGCGCAACCCTTGTCCTTAGTTGCCAGCACGTAATGGTGGGAACTCTAAGGAGACTGCCGGTGACAAACCGGAGGAAGGTGGGGACGACGTCAAGTCATCATGGCCCTTACGGCCTGGGCTACACACGTGCTACAATGGCTAGGACAGACGGCTGCAAACCNGCGAGTGGGG
>CAM_P0000101_READ_00460168 /accession=CAM_P0000101_READ_00460168 /xy=2199_0493 /region=2 /run=R_2008_08_11_16_51_31_ /length=233 /sample_id=1309720343513924875 /sample_acc=CAM_P0000101_SMPL_PAPUT2 /sample_name=CAM_P0000101_SMPL_PAPUT2 /site_id_n=CAM_P0000101_SITE_PAPUT2
TTTACCGCGGCTGCTGGCACGAAGTTAGCCGGACCTTATTCTTCGGGTACAGTCATTATCTTTCCCGACAAAAGAGCTTTACAACCCAAGGGCCTTCTTCACTCACGCGGCATCGCTGCATCAGGCTTTCGCCCATTGTGCAAGATTCCCCACTGCTGCCTCCCGTAGGAGTCTGGGCCGTATCTCAGTCCCAGTGTGGCTGATCATCCTCTACAAATCAGCTATTGATTACT
我想删除第一个
>CAM\u p*
/sample\u name=*
之后的所有文本,以及
sample\u name.*

>CAM.*/sample.\u name=*
应该只剩下这两样东西

所有这些都应删除:

/accession=CAM_P0000101_READ_00457523 /xy=2625_3790 /region=2 /run=R_2008_08_11_16_51_31_ /length=253 /sample_id=1309720343513924875 /sample_acc=CAM_P0000101_SMPL_PAPUT /site_id_n=CAM_P0000101_SITE_PAPUT2
谁能帮帮我吗?

我要去营救

awk '{line=""; sep=""; p=q=0; 
      for(i=1;i<=NF;i++) {
          if(!p && $i~/CAM_P/) {
              p=1;
              line=line sep $i;
              sep=FS
          } else if(!q && $i~/sample_name/) {
              q=1;
              line=line sep $i;
              sep=FS
          }
       } 
       print line
      }'
只匹配这两个单词,然后将输出的两行内容合并回去

sed 's/\(>CAM_P[^ ]*\).*\(\/sample_name=[^ ]*\).*/\1 \2/' filename

您期望的输出是什么?为什么不干脆
打印“>CAM\u*/sample\u name=*”
,而不用担心任何替换?您有两行输入,但只有一行输出-为什么?GTGCCTTCGGGAACCG…怎么样?你想删除还是保持原样?谢谢,但我收到一条错误消息:
awk-f short_name_fasta.awk test
awk:short_name_fasta.awk:3:awk'{line=“”;sep=“”;
awk:short_name_fasta.awk:3:^invalid char''in expression
awk:short_name_fasta.awk:3:awk'{line=”“;sep=“;
awk:short\u name\u fasta.awk:3:^语法错误脚本中不应该有
awk
,也不应该有单引号。请确认。只包括单引号之间的内容。或者,您的复制/粘贴可能从网页中获取了一些无效字符。没有问题。如果您正在寻找答案,请接受。
sed 's/\(>CAM_P[^ ]*\).*\(\/sample_name=[^ ]*\).*/\1 \2/' filename