Combinando arquivos em um diretório por cabeçalho e omitindo conteúdo compartilhado

1

então eu encontrei uma pergunta aqui que é o oposto do que eu gostaria de fazer aqui: Concatena vários arquivos com o mesmo cabeçalho .

Estou tentando mesclar ou concatenar dois arquivos, dentro de um diretório em centenas de arquivos que possuem um arquivo equivalente com a mesma substring, em um arquivo baseado no arquivo > personagem no cabeçalho. Existem milhares de cabeçalhos dentro de cada arquivo e, em oposição à pergunta feita no link que eu anexei, o conteúdo diferente do cabeçalho é o mesmo, então não quero alterar nada, mas todas as linhas que começam com '>' .

Essencialmente eu gostaria de combinar o arquivo1 ao arquivo2 pelo caractere compartilhado '>' e deixar o conteúdo do arquivo 1 em ordem.

File1
> MGBNCNOSNC_142
9u2o4840204a9
> MGBNCNOSNC_143
AOISCJNWDCSNDCCW
> MGBNCNOSNC_144
AOISCJ40204DZZW
File2
>King_Henry
>Queen_jerry
>Jack_jill
Output
> MGBNCNOSCNC_142 > King_henry
9u2o4840204a9
> MGBNCNOSCNC_143 > Queen_jerry
AOISCJNWDC
> MGBNCNOSNC_144 > Jack_jill
gefSCJ40204DZZW

Obrigado por qualquer ajuda e deixe-me saber se posso ser mais claro!

    
por Alina Orozco 20.08.2016 / 23:55

1 resposta

1

Você pode ler as linhas de File2 em uma matriz awk indexada e, em seguida, anexá-las às linhas correspondentes de File

awk '
  NR==FNR {a[i++]=$0; next} 
  /^>/ {$0 = $0" "a[j++];}
  {print}
  ' File2 File1

Alternativamente, se você tem o GNU sed (com a extensão R ) você pode tentar

sed '/^>/ R File2' File1 | sed '/^>/ {N;s/\n/ /}'

Se o seu File1 tiver exatamente uma linha adicional para cada linha a ser correspondida, outra opção pode ser duplicar o espaço File2 e, em seguida, paste os arquivos juntos

sed 'G' File2 | paste -d ' ' File1 -

embora isso resulte em um espaço posterior adicional nas linhas não correspondentes; Se isso não for desejado, você poderá inserir um espaço no início de cada linha File2 e paste sem um delimitador

sed 's/^/ /; G' File2 | paste -d '' File1 -
    
por 21.08.2016 / 02:32

Tags