다음 결과를 얻는 스크립트가 있습니다.
첫 번째 열: 슬롯 번호
두 번째 열: 포트 번호
세 번째 열: 연결 수
1 1 23,
1 2 0,
1 3 38,
1 4 34,
2 1 8,
2 2 18,
2 3 0,
2 4 22,
4 1 6,
4 2 18,
4 3 10,
4 4 22,
이제 문제는 이를 아래와 같이 더 예쁜 행렬(행 x 슬롯)로 바꾸는 방법입니다.
Slot #
1 | 2 | 3 | 4 |
P 1| 23| 8 | - | 6 |
o 2| 0 | 18| - | 18|
r 3| 38| 0 | - | 10|
t 4| 34| 22| - | 22|
#
awk를 사용하는 것이 좋은 방법이라고 생각하지만 어떻게 시작해야 할지 모르겠습니다.
답변1
본질적으로 당신이 요구하는 것은우발상황표(일명크로스탭 또는 크로스탭). 예를 들어GNU 데이터 혼합
datamash -sW crosstab 2,1 unique 3 < file
1 2 4
1 23, 8, 6,
2 0, 18, 18,
3 38, 0, 10,
4 34, 22, 22,
데이터에서 후행 쉼표를 제거하려는 경우 간단한 옵션은 다음과 같습니다.tr
tr -d , < file | datamash -sW crosstab 2,1 unique 3
1 2 4
1 23 8 6
2 0 18 18
3 38 0 10
4 34 22 22
"누락" 열을 추가하려면 필러 데이터를 제공해야 합니다.
{ tr -d , < file ; printf '3 %d -\n' {1..4} ; } |
datamash -sW crosstab 2,1 unique 3
1 2 3 4
1 23 8 - 6
2 0 18 - 18
3 38 0 - 10
4 34 22 - 22
아니면 포인트만 제공하고 datamash
나머지는 채우 도록 하세요.
{ tr -d , < file ; printf '3 1 -\n' ; } |
datamash --no-strict --filler=- -sW crosstab 2,1 unique 3
1 2 3 4
1 23 8 - 6
2 0 18 - 18
3 38 0 - 10
4 34 22 - 22
답변2
중고 PR 열 -t는 내가 원하는 것을 표시합니다. 전체 매트릭스를 표시하기 위해 더 많은 결과를 추가했습니다. 나는 첫 번째와 두 번째 열이 중복된다고 판단하여 데이터 세트에서 제거했습니다. 따라서 test_3.txt에는 열 3의 데이터 결과만 포함됩니다.
pr -ts" " --columns 9 test_3.txt | column -t
23 8 6 11 18 33 39 16 33
0 18 18 32 18 16 27 13 12
38 0 10 10 21 16 24 16 29
34 22 22 20 16 16 33 21 21
33 23 19 16 13 10 29 16 53
33 19 8 21 10 13 21 17 29
43 31 20 19 14 15 15 0 9