한 줄에 필요한 모든 정보가 포함된 출력을 생성할 수 있는 명령/스크립트가 필요합니다.

한 줄에 필요한 모든 정보가 포함된 출력을 생성할 수 있는 명령/스크립트가 필요합니다.

bash 스크립트/또는 명령을 사용하여 다음 출력을 생성하려면 어떻게 해야 합니까?

원하는 출력:

contacts.USA | Name:John Due | Gender:Male | Age:21 | Address: Texas    
contacts.USA | Name:Ed Mundo | Gender:Male | Age:41 | Address: California    
contacts.BRAZIL | Name:Tom Paul | Gender:Male | Age:26 | Address: Sau Paulo

입력 예: 비교할 연락처 파일이 100개 있습니다. 국가.

연락처 정보.미국

Name:John Due 
Gender:Male 
Age:21
Address: Texas

Name:Ed Mundo 
Gender:Male 
Age:41 
Address: California

연락처 정보.브라질

Name:Tom Paul
Gender:Male 
Age:26 
Address: Sau Paulo

아래에서 unix cmd를 사용하고 있지만 원하는 출력을 생성할 수 없습니다.

grep -E 'Name|Gender|Age|Address' contacts.*

이 명령의 출력에는 결과가 지속적으로 표시됩니다.

contacts.USA Name:John Due 
contacts.USA Gender:Male 
contacts.USA Age:21 
contacts.USA Address: Texas
contacts.USA Name:Ed Mundo 
contacts.USA Gender:Male     
contacts.USA Age:41    
contacts.USA Address: California    
contacts.BRAZIL Name:Tom Paul     
contacts.BRAZIL Gender:Male    
contacts.BRAZIL Age:26    
contacts.BRAZIL Address: Sau Paulo

답변1

해결책:

입력 파일 contacts.USAcontacts.BRAZIL.

awk '/Name/{ printf "%s | %s",FILENAME,$0 }
     /Gender|Age|Address/{ printf " | %s",$0; if($0~/Address/) print "" }' contacts.*
  • /Name/{ printf "%s | %s",FILENAME,$0 }- Name키워드로 줄을 캡처하고 FILENAME결과 문자열의 시작 부분에 파일 이름을 추가합니다.

  • if($0~/Address/) print ""- Address키워드가 있는 줄을 만난 후 레코드 구분 기호(개행)를 인쇄합니다.


산출:

contacts.BRAZIL | Name:Tom Paul | Gender:Male  | Age:26  | Address: Sau Paulo
contacts.USA | Name:John Due  | Gender:Male  | Age:21 | Address: Texas
contacts.USA | Name:Ed Mundo  | Gender:Male  | Age:41  | Address: California

답변2

다소 관용적인 awk 버전 - "단락 모드" 사용:

$ awk '{$1=FILENAME OFS $1} 1' RS= FS='\n' OFS=' | ' Contacts.*
Contacts.Brazil | Name:Tom Paul | Gender:Male  | Age:26  | Address: Sau Paulo
Contacts.USA | Name:John Due  | Gender:Male  | Age:21 | Address: Texas
Contacts.USA | Name:Ed Mundo  | Gender:Male  | Age:41  | Address: California

Perl에서의 유사한 구현:

perl -Mfeature=say -F'\n' -00ne 'say join " | ", $ARGV, @F' Contacts.*

관련 정보