파일의 패턴을 두 번째 파일의 패턴으로 바꾸기

파일의 패턴을 두 번째 파일의 패턴으로 바꾸기

파일 데이터의 일부를 다른 파일의 데이터로 바꾸고 싶습니다.

file1아래에 작성된 데이터가 있고 시작 패턴: 및 끝 패턴: 에서 데이터를 file2저장하고 교체하려는 일부 데이터가 있다고 가정합니다 .file1file2// +++ CUSTOMIZATION SETTINGS START +++// +++ CUSTOMIZATION SETTINGS END +++

안에 file1:

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WE WILL BE ON LEAVE FOR TODAY 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

안에 file2:

MANISH
MADHVI

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

NISHA
TUSHAR

file3출력으로 :

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

답변1

$ 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

설명

awk암시적으로 파일을 한 줄씩 반복합니다. 이 경우 먼저 file2를 반복한 다음 file1을 반복합니다.

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

    file2의 설정 섹션은 변수에 캡처됩니다 a.

  • FNR==NR{next}

    여전히 file2를 읽는 중이면 나머지 명령을 건너뛰고 다음 입력 줄로 점프합니다.

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

    여기에 도착하면 file1을 처리하는 중입니다. 설정 섹션의 시작 부분이 보이면 변수에 저장한 문자열을 인쇄합니다 a.

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

    file1의 설정 섹션에 있는 경우 나머지 명령을 건너뛰고 다음 입력 줄로 이동합니다.

  • 1

    1현재 행을 인쇄하기 위한 awk의 비밀스러운 약칭입니다. file1에는 있지만 설정 섹션에는 없는 경우에만 이 명령문을 얻을 수 있습니다.

관련 정보