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

时间:2015-08-17 16:43:34

标签: bash awk sed substitution

我正在寻找解决方案,但找不到合适的解决方案。

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

输入是Fasta-File:

>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_P*/sample_name=*之后的所有文字以及sample_name.*之后的所有文字

>CAM_* /sample_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

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

要求救援

// The base URL to use while testing the application.
protected $baseUrl = 'http://localhost/en';

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 }'

的另一种选择
grep

仅匹配两个单词并合并输出的两行

答案 1 :(得分:0)

这个怎么样:

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