다음과 같은 파일이 있습니다
0 1 1 2.3
0 2 2 3.1
0 3 4 1.3
0 4 5 2.5
0 5 6 7.1
1 1 1 3.3
1 2 2 1.1
1 3 4 2.3
1 4 5 4.5
1 5 6 6.1
2 1 1 2.7
2 2 2 3.5
2 3 4 1.7
2 4 5 2.4
2 5 6 7.5
3 1 1 2.9
3 2 2 3.8
3 3 4 1.9
3 4 5 2.8
3 5 6 7.9
으로 변환하고 싶습니다.
# # 0 1 2 3
1 1 2.3 3.3 2.7 2.9
2 2 3.1 1.1 3.5 3.8
3 4 1.3 2.3 1.7 1.9
4 5 2.5 4.5 2.4 2.8
5 6 7.1 6.1 7.5 7.9
"steeldriver"의 의견을 바탕으로이 게시물, 데이터의 세 열(세 번째 열은 제외한다고 가정)을 행렬로 변환할 수 있었습니다.
datamash -W crosstab 2,1 unique 3 < file
그러나 두 번째 열을 기준으로 그룹화하기 위해 다른 열을 추가하고 "--g 2,3"을 통해 스크립트를 수정하면 "datamash: conflicting Operation 'crosstab'"이 표시됩니다. 이 문제 해결에 대한 제안 사항이 있습니까?
답변1
KISS 접근 방식은 예를 들어 TAB를 "실제" 구분 기호로 사용하여 두 번째 및 세 번째 열이 단일 필드로 처리되도록 데이터를 전처리하는 것일 수 있습니다.
$ awk '{printf "%s\t%s %s\t%s\n", $1, $2, $3, $4}' file | datamash crosstab 2,1 unique 3
0 1 2 3
1 1 2.3 3.3 2.7 2.9
2 2 3.1 1.1 3.5 3.8
3 4 1.3 2.3 1.7 1.9
4 5 2.5 4.5 2.4 2.8
5 6 7.1 6.1 7.5 7.9