次の結果を得るスクリプトがあります。
最初の列:スロット番号2番目の列
:ポート番号3
番目の列:接続数
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