구분 기호 "******************"로 구분된 텍스트 파일에 여러 개의 키:값 쌍이 있습니다. 여기에 필요한 도움은 쉘 스크립트를 사용하여 이를 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
및 참조합니다. $2
이 next
명령문은 다음 라인으로 직접 처리를 진행합니다.
연관 배열에 존재하지 않는 키가 있으면 질문과 일치하는 빈 문자열이 생성됩니다.