awk 또는 Perl을 사용하여 csv 파일의 키를 기반으로 행 접기

awk 또는 Perl을 사용하여 csv 파일의 키를 기반으로 행 접기

입력 CSV 파일:

key,c1,c2,c3......,cn
1,car,phone,cat,.....,kite
2,abc,def,hij,.......,pot
1,yes,no,is,.........,hello
2,hello,yes,no,......,help

출력 CSV 파일:

Key,c1,c2,c3,.......,cn
1,caryes,phoneno,catis,.....,kitehello
2,abchello,defyes,hijno,....,pothelp

입력 파일에는 1,400만 줄이 있습니다. 누구든지 효율적인 방법을 제공하는 데 도움을 줄 수 있습니까? 미리 감사드립니다.

답변1

얼마나 효율적인지는 모르겠지만 각 해시 값의 각 요소에 map문자열 연결 할당을 사용하여 익명 배열의 해시로 비슷한 작업을 수행할 수 있습니다..=

perl -F, -nle '
  $k = shift @F;
  map { $h{$k}[$_] .= $F[$_] } 0..$#F 
  }{ 
  for $k (sort { $a <=> $b } keys %h) {
    print join ",", $k, @{ $h{$k} }
  }' file
key,c1,c2,c3......,cn
1,caryes,phoneno,catis,..............,kitehello
2,abchello,defyes,hijno,.............,pothelp

관련 정보