Substituir o padrão no arquivo pelo padrão no segundo arquivo

2

Eu quero substituir parte dos dados de um arquivo, com dados de outro arquivo.

Suponha que file1 tenha dados conforme abaixo e file2 tenha alguns dados que eu queira armazenar e substitua file1 dados de file2 do padrão inicial: // +++ CUSTOMIZATION SETTINGS START +++ e o 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

Em file3 como saída:

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA
    
por yisha 07.10.2014 / 06:10

1 resposta

6
$ 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

awk implicitamente percorre os arquivos linha por linha. Neste caso, temos que passar pelo arquivo2 primeiro, depois pelo 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 resto 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 abreviação abreviada de awk para imprimir a linha atual. Nós só chegamos a esta declaração se estamos no arquivo1, mas não na seção de configurações.

por 07.10.2014 / 06:49