![CSV 처리: 열/행 값을 열 값이 일치하는 다른 행으로 이동](https://linux55.com/image/147922/CSV%20%EC%B2%98%EB%A6%AC%3A%20%EC%97%B4%2F%ED%96%89%20%EA%B0%92%EC%9D%84%20%EC%97%B4%20%EA%B0%92%EC%9D%B4%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EB%8B%A4%EB%A5%B8%20%ED%96%89%EC%9C%BC%EB%A1%9C%20%EC%9D%B4%EB%8F%99.png)
약 50개의 열이 있는 csv 파일이 있는데, 이는 20~100개의 행 사이에 있을 수 있습니다.
각 레코드에는 ID가 있으며 일부 레코드는 2개의 그룹으로 묶일 수 있습니다. 기본적으로 내가 해야 할 일은 그룹의 다른 ID와 동일한 행에 ID를 추가하는 것입니다. 예:
ID ,group,blank column
2019-1 , ,
2019-2 ,GRP1 ,
2019-3 ,GRP2 ,
2019-4 ,GRP1 ,
2019-5 , ,
2019-6 ,GRP2 ,
내가 원하는 출력은 다음과 같습니다.
ID ,group,blank column
2019-1 , ,
2019-2 ,GRP1 ,2019-4
2019-3 ,GRP2 ,2019-6
2019-5 , ,
awk를 사용하려고 하면 운이 없습니다. 그룹 없이 행이 누락되거나 중복된 값이 발생합니다.
답변1
perl -a -F, -ne 'if($F[1]=~/\S/) { push @{$d{$F[1]}}, $F[0]; } else { print ; }
END {
for(keys %d){
print shift @{$d{$_}},",$_, ",@{$d{$_}},"\n"
}
}' my.csv