키:값 쌍의 여러 데이터 블록을 csv 파일로 변환

키:값 쌍의 여러 데이터 블록을 csv 파일로 변환

구분 기호 "******************"로 구분된 텍스트 파일에 여러 개의 키:값 쌍이 있습니다. 여기에 필요한 도움은 쉘 스크립트를 사용하여 이를 csv 파일로 변환하는 것입니다.

*************
Name : Anderson 
Age : 32 
Country : U.S
*************
Name : Pramod 
Country : U.K
*************
Country : Africa 
Sport : Football
*************

출력은 OutPut 형식의 csv 파일이어야 합니다.

Name,Age,Country,Sport
Anderson,32,U.S.A,
Pramod,,U.K,
,,Aftica,Football

이것은 GNU reutils의 rec2csv 변환과 다소 유사하지만 쉘 스크립트를 통해 수행되기를 원합니다.

답변1

다음 변환을 사용할 수 있습니다 awk.

$ awk -F' : ' 'BEGIN { print "Name,Age,Country,Sport"; OFS="," }
    /^\*+$/ && NR>1 { print a["Name"], a["Age"], a["Country"], a["Sport"];
                      delete a; next}
    { a[$1]=$2} ' file.rec

:입력 필드 구분자로 사용되고, 출력 ,필드 구분자로 설정되고, 연관 배열은 a값을 임시로 저장하는 데 사용되며, 정규식은 ^\*+$레코드 구분선을 식별하고 두 번째 구분선 뒤에 전체 레코드만 인쇄하는 데 사용됩니다(즉, 레코드 수가 1보다 큼), 각 레코드 후에 배열이 지워집니다.

입력의 키와 값을 변수 $1및 참조합니다. $2next명령문은 다음 라인으로 직접 처리를 진행합니다.

연관 배열에 존재하지 않는 키가 있으면 질문과 일치하는 빈 문자열이 생성됩니다.

관련 정보