첫 번째 열 $1
을 기반으로 한 행을 병합하고 출력을 포맷하고 싶습니다. 헤더를 인쇄하는 동안 Max Unique count of first field.
을 생성해야합니다. 예를 들어, 앙골라는 count = 3, 브라질은 count = 5, 잠비아는 count = 1로 나타납니다. 필드 $ 1의 최대 고유 카운트는 5이므로 모든 필드에 대해 적절한 헤더를 갖기 위해 헤더를 5 번 인쇄해야합니다.awk가 열을 기준으로 행을 병합합니다.
출력을 인쇄하는 동안 original input file
라인 주문을 유지하고 싶습니다. 로 사용 내 실제 입력 파일이 Input.csv Output.csv
Country,Network,Details,Amount,Country,Network,Details,Amount,Country,Network,Details,Amount,Country,Network,Details,Amount,Country,Network,Details,Amount
Angola,voda,xxx,10,Angola,at&t,xxx,20,Angola,mtn,xxx,30
Brazil,voda,yyy,40,Brazil,voda,yyy,50,Brazil,at&t,yyy,60,Brazil,mtn,yyy,70,Brazil,voda,yyy,80
Zambia,tcl,zzz,90
을 원하는
Country,Network,Details,Amount
Angola,voda,xxx,10
Angola,at&t,xxx,20
Angola,mtn,xxx,30
Brazil,voda,yyy,40
Brazil,voda,yyy,50
Brazil,at&t,yyy,60
Brazil,mtn,yyy,70
Brazil,voda,yyy,80
Zambia,tcl,zzz,90
10 개 필드, 12 개 필드 등
같은 차이가 나는 두 아래를 사용하고 있습니다 명령을 사용하여 원하는 출력을 얻고 실제 입력 파일의 필드 수에 따라 매번 수동으로 카운트를 변경하십시오.
단계 : # 1
awk 'BEGIN { while (count++<5) header=header "Country,Network,Details,Amount,"; print header }' > output.csv
단계 : 2
awk -F, '
/.+/{
if (!($1 in Val)) { Key[++i] = $1; }
Val[$1] = Val[$1] $0 ",";
}
END{
for (j = 1; j <= i; j++) {
print(Val[Key[j]]);
}
}' input.csv >> output.csv
제안을 찾고 ...
당신은 ++ OrderNum [$ 1] '와 같은 배열을 유지'와 외부 루프로 그를 추가하려면 END 인쇄 문을 구동하기 위해,하지만 왜는'AWK'{기존의 음식물을} '사용할 수 있습니다 | 정렬'(귀하의 입력 데이터가 국가 이름별로 정렬 된 것 같습니다)? 행운을 빕니다. – shellter
그리고 ... 작은 샘플 데이터, 필요한 출력 및 ... 잘 쓰여진 Q에 대해 우노를 사용합니다. 계속 게시하고 행운을 빌어 요! – shellter