Bash 쉘 스크립트에서 행을 열로 변환

Bash 쉘 스크립트에서 행을 열로 변환

다음 입력을 원하는 출력으로 변환하는 스크립트를 작성해야 합니다. 입력은 csv 파일입니다.

입력 샘플

Id, sid,value,name
20,2,245,f1
20,2,345,f2
20,3,445,f3

샘플 출력

Id,sid,f1,f2,f3
20,2,245,345,
20,3,,,445

각 행의 세 번째와 네 번째 열을 열로 변환해야 합니다.

예를 들어 첫 번째 행과 두 번째 행의 첫 번째 열과 두 번째 열이 동일하므로 f1과 f2의 값은 각 행의 세 번째 열이 되어야 하고 f3은 비어 있어야 합니다.

답변1

당신이 csvsql사용할 수있는csvkit.

csvsql -S --query '
    select
    "Id",
    sid,
    max(case when name="f1" then value else null end) as f1,
    max(case when name="f2" then value else null end) as f2,
    max(case when name="f3" then value else null end) as f3
    from file
    group by "Id",sid
'  file
  • 열은 " sid"선행 공백으로 호출되므로 -S(초기 공백 건너뛰기) --- 또는 " sid"쿼리에 사용해야 합니다.
  • max()동일한 ID/SID 쌍이 여러 개 발견되어야 하는 경우 사용할 값을 결정하는 데 사용했습니다. avg()또는 등을 사용하고 싶을 수도 있습니다 min()(예를 보려면 @FedonKadifeli의 설명 참조).

산출:

Id,sid,f1,f2,f3
20,2,245,345,
20,3,,,445

답변2

밀러 사용(https://github.com/johnkerl/miller)

mlr --csv reshape -s name,value then unsparsify input.csv

당신은 할 것

Id, sid,f1,f2,f3
20,2,245,345,
20,3,,,445

관련 정보