Use sed para manter apenas partes de um arquivo e reordená-lo (com base na sintaxe textWrangler grep)

3

Eu quero editar um arquivo chamado trial.fastq com o seguinte formato:

@NAME123.15.1 15 length=151
GTAGCNTACGGGAGGCAGCAGTGGGGAATTTTCC
+NAME123.15.1 15 length=151
AAABB#>>AABDGCEGGGFGGGHHHGGGFHHGHH
@NAME123.14.1 14 length=150
TTCGCNTACGGGAGGCAGCAGTAGGGAATCTTCC
+NAME123.14.1 14 length=150
ABBBB#>>ABBBGGGGGEGGGGHDGFFFHHGHHH

Eu quero mudar o formato para isso:

@Inst:1:FID:LANE:TILE:15:Y 1:Y:0:NAME123
+GTAGCNTACGGGAGGCAGCAGTGGGGAATTTTCC
@Inst:1:FID:LANE:TILE:14:Y 1:Y:0:NAME123
+TTCGCNTACGGGAGGCAGCAGTAGGGAATCTTCC

Eu tentei muitos formatos de sed , incluindo:

sed -i -E 's/@(\w+).(\d+).(\d)\s\d+\slength=\d+\n.*/@Inst:1:FID:LANE:TILE::Y :Y:0:\n/g' trial.fastq > trial_new.fastq

que eu encontrei ao copiar meu TextWrangler, localize e substitua a pesquisa grep. Assim como:

sed -e 's/\(@\w\).\(\d..+\).\(\d\)\s\d..*\slength\=\d..*\n.*$(\w..*)\(.*\)$\+.*$.*$/@Inst\:1\:FID\:LANE\:TILE\:\:Y \:Y\:0\:\n/g' trial.fastq

Tenho certeza que estou indo sobre o caminho errado. Alguém pode me ajudar a entender o que estou fazendo de errado e como corrigir esse problema?

    
por Katherine 07.03.2017 / 22:09

1 resposta

0

Espero ter entendido que você desejou a saída corretamente!

$ sed -nr '/#/d;s/@([^\.]+)[^ ]+ ([0-9]+) .*/@Inst:1:FID:LANE:TILE::Y 1:Y:0:/p;s/^[A-Z]/\+&/p' file
@Inst:1:FID:LANE:TILE:15:Y 1:Y:0:NAME123
+GTAGCNTACGGGAGGCAGCAGTGGGGAATTTTCC
@Inst:1:FID:LANE:TILE:14:Y 1:Y:0:NAME123
+TTCGCNTACGGGAGGCAGCAGTAGGGAATCTTCC

Explicação

  • -n não imprime até pedirmos
  • -r use ERE
  • /#/d excluir linhas com #
  • %código%.' para depois
  • ([^\.]+) save some characters that are not salva alguns números entre espaços
  • [^ ]+ ([0-9]+) .* referência anterior ao padrão salvo em substituição
  • separa comandos, como no shell
  • ; substitui as linhas que começam com uma letra maiúscula com prefixo s/^[A-Z]/\+&/
  • + imprime as linhas em que trabalhamos

Use o p flag se você quiser editar o arquivo no lugar, depois de testar a saída é o que você quer (repita o comando com -i )

    
por 07.03.2017 / 22:31