RegEx найти уникальную строку - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть заголовок и формат файла:

@3d886d0d-a260-4c2d-b3de-7b05fee9ec6a runid=8234a809c305f32bf08994f578af0b1464b16de1 read=114 ch=336 start_time=2019-09-10T12:25:24Z flow_id=XXX protocol_group_id=XXX sample_id=XXX 
GTTACCTTGTTACGACTTCACCCAGTCATGAACCACACCGTGGTAAACGCCCTCCCGAAGGTTAAGCTATCTACTTCTGGTGCAGCCCACTCCCATGGTGTGACGGGCGGTGTGTACAAGGCCAGGAACATATTCACCGTGACATTCTGATTCACGATTACCAAAATTCCGACTTCATGGAGTCGAGTTGCGAACTCCAATCCGGACTGACGTACTTTGTAGGATTCGCTCACTATCCCTTTAACTTACTACGCCATTGTAGCACGTGTGTAGCCCTCTCGTAAGGGCCATGATGATGACGTCGTCCCCACCTTCCTCCGGTTTTATCACCGGCAGTCTCCTAATTCCCACCATTACGTGCTGGCAAACAAGGATAAGGGTTGCTTCGTTGGGACTTAACAACATTTCACAACACGAGCTGACGACAGCCATGCAGCACCTGTCTCCAGAGTTCCAGAGGCACTAAGCTATCTCTAGCGAATTCTCTGGATGTCAGAGTAGGTGCATCAGAATTAAACCACCACCGCTTGTGCGGGCCCCGTCAATTCATTTGGAGTTTTAATCTTGCGATAGCACTCCCCAGGCGGTCATAACGCGTTAGCTCCGAAAGCCACGGCTCAAGGCCACAACCTTCAAGTAGACATCGTTTACGGCGTGGACTACCAGGGTATCTAATCCTGTTTTGCTCCCACGCTTTCATCTGAGCGTCAGTCTTTGTCAGGGGCCGCCTTCGCCACCGGTATTCCTTCAGATCTCACGCATTTCACCGCTACACCTGAAATTCTACCCCCTCTGGAACTCCCTAGTCTGCCAGTTCTTTGTTCGAGTTGAAAGACCCCAGGCTTTCCACATCCTGTAACAAACCGCCTGCATGCGCTTAGTAATTCCGGTAACGCTCACTTTACCCTCCGTATTACCGCGGCTGCTAGGCACGGAGTTAGCCGGTGCTTCTTCTGTTGCTAACGTCCAAGCGCTGAAGCTATTAACTCCAACGCCTTCCTCTAACTGAAAGTACTTTACAACCGAAGGCCTTCTTCATACACACGCGAGCATGGCTGCATCAGGGTTTCCCCATTGTGCAATATTTACTGCTCCCACGCAGGAAGTCTGGACGTGTCTCAGTTCCAGTGTGGCTGATCATCCTCAGACCAGCTAGGATCGTCGCCTTGGTGACCATTACCCCACCAACTAGCTAATCCACCTGGGCTAATCACGACTGAGAGGCGAAGGTCCCCTCTTTGCTCCGAAGAGATTATGCCTCGTTTCCAATAGTTATCCCCCACATCAGGGTATATTCCCAGGCATTACTCACCCGTCCGCCGCTCGTCAGCAAAAAGAAAGCAAGCTTCCTTTCTGTTACCGCTCGACTTGCATGTGTTAGGCCTGCCGCCAGCACCAATCTGAGCCATGGTCAAACT
+
2+96JFHGC?8</3>))A?324/%9=@66:CCMO77+=86781679322D?67)3-''2-5?9756;?;=B86&&2.$+*,'*))(((-48AIE8>>@@G@?B5597**-&699=BBRG6;&),75,+**)()9@0?BC@>;<<<EF:ECQ;@=;ADFE/-*+))0(57=B=7F=B&'&*$73@0.3CD1-'%&')%5B>$$?AA888F@/./,()*/(&(///8:5.2<.>>99%%2%%&'%$##"#"#$)-3<>9B+;8:7:229-('#&,.,+'%(43371.;873%$'$',*1:9><<<90076*6B?(:-.(2<76<;;'0>>9<?>74.39::/.'%%&,6844<@//266:$-ACC10891666)CCGG@/8>06%12969;;).62&&&5)+==@@AH4F+,<-.).0*;98=/+/<>D7ED@6,(9BAACB@6:@E&?>4-510%/%$&3559>>H<=BE?9926+&&'&(*)6:=GH<8:21.10'/+%%%&##&)5;$$-',1>=340%%*-10-()*+820/,3:54/+588;/?FC=F=&($4;:85,++)(,,12+$%')*'39?<;99=B@854$$65)))7=>1+)+%/+,229IF8)))64;;7(*10+01,,,))/12)55558410)BD@/.13$.86@=<>1468928>.+<?A?%%)%&)6:;777),)-2:ADG;?).D224=776;3345'/040?-635=CB:=<;<8--)$$$))$%(,%*%(%$$(8:52+'-44>>++'*+'')*/9=@?@:1&::B53?>:1()/%%'%**,%3%)))1(,+,+%/3/*$'9:@6:2,3/+,%$$*#+*))%)<8985&:/0667;:'7F=<@A(B*AFF?-A>++--$$&-0+7)-2&3,,-.,$%:,1&#"##(120.':?EE:@3DD63;9;>2,*(,,++)+.'11>2(),&,;<++A=E>8166>;ABI725''@JE656)&#&#*-+($%**16&8:2$%447;9B1:&0-5:4-41<&);BBB:>?1..-2333CA?;04-5'71)*#%###'&'*+-+/.5/302:/6B5339=BJF54@-%'7<6//-'%&)/+&%##"$$'($'()$'..*+6*3,::;A5?%517+B,A58;>8?8C?=@956;'@76?CC353-(033>C9999::98=734+<8(().6620&(,$+&&'021::004$$$$%+0/+,2+3-(*(-0/92+/&%--/)(+(,-3*;:9-3--'>--41,*)2/*'&%&258?==-86,239@:<<>MFDC7<,'>76-5=C?HGDCE>/3454470<:91<;93686-88&&5:51?2/2ME9+$2787100)#$$%()*4AE96-/09:5583:?AILFIB;3'&5;*/59+:<:;8<82&%#'*965<4079B=3$$&)''*/35 

Мне нужно определить заголовок и добавить дополнительный текст, мой "штрих-код" в конце строки заголовка.Количество разделенных табуляцией переменных в заголовке варьируется.В этом случае штрих-код должен быть добавлен после «sample_id = XXX».

В идеале заголовок должен заканчиваться следующим образом:

@3d886d0d-a260-4c2d-b3de-7b05fee9ec6a runid=8234a809c305f32bf08994f578af0b1464b16de1 read=114 ch=336 start_time=2019-09-10T12:25:24Z flow_id=XXX protocol_group_id=XXX sample_id=XXX$ barcode=barcodeXX

К сожалению, sed -i -E "s/^@[^ \t]+([ \t]+[^ \t=]+=[^ \t]+)*/& $BARCODETAG/" $filename недостаточно, так как текст можетначинаться с @ и будет иметь следующий вывод:

@d03b78bb-9ed5-4891-96bc-a1408d163ddc runid=8234a809c305f32bf08994f578af0b1464b16de1 read=360 ch=303 start_time=2019-09-10T12:26:42Z flow_id=XXX protocol_group_id=XXX sample_id=XXX $ barcode=barcode03
GTTTGATCATGGCTCAGGATGAACGCTGGCGGCGTGCCTAACATGCAAGTCGAACGCACAGCGAAAGGTGCTTGCCTTTCAAGTGAGTGGCGAACGGGTGAGTAACACGTGGACAACCTGCCTCAAGGCTGGGGATAACATTTGGAAACAGATGCTAATACCGAATAAAACTTAGTGTCGCATGACACAAAGTTAAGAGCGCTTCGGCGTCACCTAGAATGGATCCGCAGTGCATTAGTTAGTTGGTGTAGGCCTACCAAGACAATGATGCATAGCCGAGTTGAAGACTGATCAGCCACGTGGGACTGAGACTTTAAGCTCCTACAGGAGGCTGCAGTAGGAATCTTCCACAATGGGCGAAAGCGCAGTGGAACAACGCCGCGTGTGTGATGAAGGCTTTCGGGTCGTAAACACTGTTGTATGGGAAGAACAGCTAAGAATAAGGAAATGATTTTAGTTTGACGGTACCATACCAGAAAGTTGACTAAATACGTGCCCAGCCGCGTAATATGTGCGAGCGTTATCCGGATTTATTG
+
@FEFJ:5@2//,++-'44414>@78AGEI9<>46===>>B4,--+532<;?))/1115::96953'..65**+&;<=@5?C/9:A=A?B?:965+,09250;@K0/(12..3ADF6ADE97+624.,++***4;28311125F:35;*))),31/39/++=<3/:<>=C>22:*3%(&?34@>GA?A@AA+-KF@/&'(*(*/5<6988DFD=?*&$*+:=2A//;+,)/$$11?B:?KD2<;;.-7066-=@>314@C;:;<=76;8=;6:<<>EC1%07,,-++77=D30:$981'#$,*,0+$%+-%57?>99/%0829/-**-*,(($-&&$%-,36.9:=;:.2+@DC++-87952/1*)'''*()',<B3'(**)4;==::=516**(,+++,45,-%&&1234(+;BE;4@>;:448=093B3**+&40&-D4,,(,%00.-E;QIE?01578:+%%%$$$$%&)+.4+0($-&-2(4=@?;66925.*##&(&%'&$('&#(&$+&&'&.47:=9''<%&$<>G**+: $ barcode=barcode03

Я считаю, что конкретно структура начала заголовка @xxxxxxxx-xxxx-xxxx-xxxx (5-е поле отличается по количеству символов) или @ XXXX runid=самые уникальные идентификаторы


Хорошо, сри, мы снова идем:)

Так что только в верхнем заголовке мне нужно добавить «штрих-код» в концевесь заголовок.В этом случае после «sample_id = XXX».

Из-за «@» в 4-й строке, «штрих-код» также добавляется в конец этой строки.

@3d886d0d-a260-4c2d-b3de-7b05fee9ec6a runid=8234a809c305f32bf08994f578af0b1464b16de1 read=114 ch=336 start_time=2019-09-10T12:25:24Z flow_id=XXX protocol_group_id=XXX sample_id=XXX 
GTTACCTTGTTACGACTTCACCCAGTCATGAACCACACCGTGGTAAACGCCCTCCCGAAGGTTAAGCTATCTACTTCTGGTGCAGCCCACTCCCATGGTGTGACGGGCGGTGTGTACAAGGCCAGGAACATATTCACCGTGACATTCTGATTCACGATTACCAAAATTCCGACTTCATGGAGTCGAGTTGCGAACTCCAATCCGGACTGACGTACTTTGTAGGATTCGCTCACTATCCCTTTAACTTACTACGCCATTGTAGCACGTGTGTAGCCCTCTCGTAAGGGCCATGATGATGACGTCGTCCCCACCTTCCTCCGGTTTTATCACCGGCAGTCTCCTAATTCCCACCATTACGTGCTGGCAAACAAGGATAAGGGTTGCTTCGTTGGGACTTAACAACATTTCACAACACGAGCTGACGACAGCCATGCAGCACCTGTCTCCAGAGTTCCAGAGGCACTAAGCTATCTCTAGCGAATTCTCTGGATGTCAGAGTAGGTGCATCAGAATTAAACCACCACCGCTTGTGCGGGCCCCGTCAATTCATTTGGAGTTTTAATCTTGCGATAGCACTCCCCAGGCGGTCATAACGCGTTAGCTCCGAAAGCCACGGCTCAAGGCCACAACCTTCAAGTAGACATCGTTTACGGCGTGGACTACCAGGGTATCTAATCCTGTTTTGCTCCCACGCTTTCATCTGAGCGTCAGTCTTTGTCAGGGGCCGCCTTCGCCACCGGTATTCCTTCAGATCTCACGCATTTCACCGCTACACCTGAAATTCTACCCCCTCTGGAACTCCCTAGTCTGCCAGTTCTTTGTTCGAGTTGAAAGACCCCAGGCTTTCCACATCCTGTAACAAACCGCCTGCATGCGCTTAGTAATTCCGGTAACGCTCACTTTACCCTCCGTATTACCGCGGCTGCTAGGCACGGAGTTAGCCGGTGCTTCTTCTGTTGCTAACGTCCAAGCGCTGAAGCTATTAACTCCAACGCCTTCCTCTAACTGAAAGTACTTTACAACCGAAGGCCTTCTTCATACACACGCGAGCATGGCTGCATCAGGGTTTCCCCATTGTGCAATATTTACTGCTCCCACGCAGGAAGTCTGGACGTGTCTCAGTTCCAGTGTGGCTGATCATCCTCAGACCAGCTAGGATCGTCGCCTTGGTGACCATTACCCCACCAACTAGCTAATCCACCTGGGCTAATCACGACTGAGAGGCGAAGGTCCCCTCTTTGCTCCGAAGAGATTATGCCTCGTTTCCAATAGTTATCCCCCACATCAGGGTATATTCCCAGGCATTACTCACCCGTCCGCCGCTCGTCAGCAAAAAGAAAGCAAGCTTCCTTTCTGTTACCGCTCGACTTGCATGTGTTAGGCCTGCCGCCAGCACCAATCTGAGCCATGGTCAAACT
+
2+96JFHGC?8</3>))A?324/%9=@66:CCMO77+=86781679322D?67)3-''2-5?9756;?;=B86&&2.$+*,'*))(((-48AIE8>>@@G@?B5597**-&699=BBRG6;&),75,+**)()9@0?BC@>;<<<EF:ECQ;@=;ADFE/-*+))0(57=B=7F=B&'&*$73@0.3CD1-'%&')%5B>$$?AA888F@/./,()*/(&(///8:5.2<.>>99%%2%%&'%$##"#"#$)-3<>9B+;8:7:229-('#&,.,+'%(43371.;873%$'$',*1:9><<<90076*6B?(:-.(2<76<;;'0>>9<?>74.39::/.'%%&,6844<@//266:$-ACC10891666)CCGG@/8>06%12969;;).62&&&5)+==@@AH4F+,<-.).0*;98=/+/<>D7ED@6,(9BAACB@6:@E&?>4-510%/%$&3559>>H<=BE?9926+&&'&(*)6:=GH<8:21.10'/+%%%&##&)5;$$-',1>=340%%*-10-()*+820/,3:54/+588;/?FC=F=&($4;:85,++)(,,12+$%')*'39?<;99=B@854$$65)))7=>1+)+%/+,229IF8)))64;;7(*10+01,,,))/12)55558410)BD@/.13$.86@=<>1468928>.+<?A?%%)%&)6:;777),)-2:ADG;?).D224=776;3345'/040?-635=CB:=<;<8--)$$$))$%(,%*%(%$$(8:52+'-44>>++'*+'')*/9=@?@:1&::B53?>:1()/%%'%**,%3%)))1(,+,+%/3/*$'9:@6:2,3/+,%$$*#+*))%)<8985&:/0667;:'7F=<@A(B*AFF?-A>++--$$&-0+7)-2&3,,-.,$%:,1&#"##(120.':?EE:@3DD63;9;>2,*(,,++)+.'11>2(),&,;<++A=E>8166>;ABI725''@JE656)&#&#*-+($%**16&8:2$%447;9B1:&0-5:4-41<&);BBB:>?1..-2333CA?;04-5'71)*#%###'&'*+-+/.5/302:/6B5339=BJF54@-%'7<6//-'%&)/+&%##"$$'($'()$'..*+6*3,::;A5?%517+B,A58;>8?8C?=@956;'@76?CC353-(033>C9999::98=734+<8(().6620&(,$+&&'021::004$$$$%+0/+,2+3-(*(-0/92+/&%--/)(+(,-3*;:9-3--'>--41,*)2/*'&%&258?==-86,239@:<<>MFDC7<,'>76-5=C?HGDCE>/3454470<:91<;93686-88&&5:51?2/2ME9+$2787100)#$$%()*4AE96-/09:5583:?AILFIB;3'&5;*/59+:<:;8<82&%#'*965<4079B=3$$&)''*/35 

В идеале заголовок должен выглядеть так:

@3d886d0d-a260-4c2d-b3de-7b05fee9ec6a runid=8234a809c305f32bf08994f578af0b1464b16de1 read=114 ch=336 start_time=2019-09-10T12:25:24Z flow_id=XXX protocol_group_id=XXX sample_id=XXX$ barcode=barcodeXX

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете использовать

sed -i -E "s/^@[[:xdigit:]]{8}(-[[:xdigit:]]{4}){3}-[[:xdigit:]]+([ \t]+[^ \t=]+=[^ \t]+)*/& $BARCODETAG/" file

См. онлайн-демонстрацию

Шаблон будет соответствовать

  • ^ - началострока
  • @ - @ символ
  • [[:xdigit:]]{8}(-[[:xdigit:]]{4}){3}-[[:xdigit:]]+ - 8 шестнадцатеричных символов, 3 вхождения -, а затем 4 шестнадцатеричных символа, -, 1+ шестнадцатеричных символов
  • ([ \t]+[^ \t=]+=[^ \t]+)* - 0 или более вхождений из 1+ пробелов / табуляций, за которыми следуют 1+ символов, кроме пробела, табуляции и = символов, затем =, а затем 1+ символов, кроме пробела и табуляции.

В & в запасной части вставляется все найденное совпадение.

Помните флаг -E, необходимо заставить + работать как квантификатор и(...) в качестве захватывающих скобок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...