Substitua o padrão no arquivo pelo padrão no segundo arquivo

Substitua o padrão no arquivo pelo padrão no segundo arquivo

Quero substituir parte dos dados de um arquivo por dados de outro arquivo.

Suponha file1que haja dados como estão escritos abaixo e file2alguns dados que desejo armazenar e substituir file1dados do file2padrão inicial: // +++ CUSTOMIZATION SETTINGS START +++e do padrão final: // +++ CUSTOMIZATION SETTINGS END +++.

Em file1:

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WE WILL BE ON LEAVE FOR TODAY 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

Em file2:

MANISH
MADHVI

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

NISHA
TUSHAR

Como file3saída:

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

Responder1

$ awk '/SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}} FNR==NR{next}   /SETTINGS START/{print substr(a,2)} /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}  1' file2 file1
ANJALI NISHA

// +++ CUSTOMIZATION SETTINGS START +++

WELCOME ALL

// +++ CUSTOMIZATION SETTINGS END +++

PREETI MONA

Explicação

awkpercorre implicitamente os arquivos linha por linha. Nesse caso, fazemos um loop primeiro no arquivo2 e depois no arquivo1.

  • /SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}}

    A seção de configurações do arquivo2 é capturada na variável a.

  • FNR==NR{next}

    Se ainda estivermos lendo o arquivo2, pule o restante dos comandos e pule para a próxima linha de entrada.

  • /SETTINGS START/{print substr(a,2)}

    Se chegarmos aqui, estamos processando o arquivo1. Quando virmos o início da seção de configurações, imprima a string que salvamos na variável a.

  • /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}

    Se estivermos na seção de configurações do arquivo1, pule o restante dos comandos e vá para a próxima linha de entrada.

  • 1

    1é a abreviatura enigmática do awk para imprimir a linha atual. Só chegaremos a esta declaração se estivermos no arquivo1, mas não na seção de configurações.

informação relacionada