다른 파일을 기반으로 동일한 위치에 줄 바꿈 도입

다른 파일을 기반으로 동일한 위치에 줄 바꿈 도입

3개의 입력 파일이 있는데 모두 동일한 줄 수를 가지고 있습니다. 나는 이 질문을 흥미롭게 만들기 위해 영화 예를 생각해 냈습니다.

file1.txt - 기본적으로 배우 이름이 포함되어 있습니다.

1234|jacknicholson|actor
5678|jacknicholson|director
4321|christianbale|actor

file2.txt - 배우가 포함된 영화.

1234|oneflewovercuckoosnest^asgoodasitgets
5678|theshining
4321|batmanbegins^darkknight

file3.txt - 배우의 거주지.

1234|california
5678|hollywoodstudios
4321|losangeles

다음 조건에 따라 첫 번째 입력 파일을 분할했습니다. 이름이 동일하면 일부 알고리즘을 적용해야 합니다. 명령은 다음과 같습니다.

awk -F '|' 'NR>1 && $2 != prev {print ""} {prev=$2; print}' file1.txt

위의 명령은 내 첫 번째 파일( )을 다음과 같이 만듭니다 file1.txt.

1234|jacknicholson|actor
5678|jacknicholson|director

4321|christianbale|actor

또한 알고리즘을 적용할 수 있도록 나머지 2개 파일의 동일한 위치에 공백을 삽입해야 합니다.

제가 생각한 한 가지 방법은 공간의 위치를 file1.txt​​배열에 저장한 다음 나머지 2개 파일에서 해당 위치를 만나면 공간을 도입하는 것입니다.

답변1

actor의 변경 사항과 동일한 위치에 파일에 빈 줄을 추가하려면 file1.txt다음을 시도하십시오.

$ awk -F '|' '{save=$0; getline<"file1.txt"} NR>1 && $2!=prev {print ""} {prev=$2; print save}' file2.txt
1234|oneflewovercuckoosnest^asgoodasitgets
5678|theshining

4321|batmanbegins^darkknight

위의 코드는 두 파일을 동시에 읽을 수 있도록 확장되었다는 점을 제외하면 여러분의 코드와 매우 유사합니다. 라인을 읽고 file2.txt변수에 저장합니다 save. 그런 다음 에서 읽고 file.txt코드와 동일한 논리를 사용하는 경우 참가자가 변경되었는지 확인하고 그렇다면 개행을 인쇄합니다. 그런 다음 에서 받은 줄을 인쇄합니다 file2.txt.

답변2

또 다른 awk해결책:

$ awk 'FNR==NR{if(!NF){a[FNR]=1}next}a[FNR]{print"\n"$0;next}{print}' file1.txt file2.txt
1234|oneflewovercuckoosnest^asgoodasitgets
5678|theshining

4321|batmanbegins^darkknight
  • 읽을 때 행이 비어 있으면 file1.txt배열에 행 번호를 표시합니다.a
  • 를 읽을 때 file2.txt배열의 빈 줄 번호를 얻고 a그 앞에 빈 줄을 인쇄합니다. 다른 라인의 경우 정상적으로 인쇄됩니다.

관련 정보