私はかなり大きなデータセット〜5億行を持っています。データセットは以下の通りです。列1は浮動小数点数、列2はmac id(デバイスID)です。
1616.93,ac:22:0b:a6:22:c3
2872.32,c0:bd:d1:36:bb:49
3314.55,d4:0b:1a:39:19:b2
2854.11,18:f6:43:64:81:67
3540.68,18:f6:43:64:81:67
3856.91,ac:22:0b:a6:22:c3
2497.93,d4:0b:1a:39:19:b2
この問題は、列2をグループ化してから約100,000個のランダムサンプルを出力し、その特定のグループの列1で最大値を見つけることが必要です。
中間出力は次のとおりです(col1でグループ化)。
1616.93,ac:22:0b:a6:22:c3
3856.91,ac:22:0b:a6:22:c3
2854.11,18:f6:43:64:81:67
3540.68,18:f6:43:64:81:67
2872.32,c0:bd:d1:36:bb:49
3314.55,d4:0b:1a:39:19:b2
2497.93,d4:0b:1a:39:19:b2
その後、グループ化された各列の最大値が必要です。出力は次のとおりです。
3856.91,ac:22:0b:a6:22:c3
3540.68,18:f6:43:64:81:67
2872.32,c0:bd:d1:36:bb:49
3314.55,d4:0b:1a:39:19:b2
最後のステップは本当にランダムなサンプルを得ることです。出力は次のとおりです。
3540.68,18:f6:43:64:81:67
2872.32,c0:bd:d1:36:bb:49
これを行う方法についてのアイデアがあります。私はちょうどLinuxを使い始めましたが、これは難しいことをする方法がわかりません。どんな助けでも大変感謝します。
ベストアンサー1
努力する
BEGIN { srand() ;r=0 ; FS="," ; before="" ; }
{ if ( $1 > V[$2]) V[$2]=$1 ;
if ( before != $2 && before != "" ) {
r=rand()*100 ;
if ( r > 50 ) printf "%s,%s\n",V[before],before ;
}
before=$2 ;
} data-file.txt
どこ
if ( $1 > V[$2]) V[$2]=$1
; macの最大値を取得します。if ( before != $2 && before != "" ) {
新しいmac値が表示されたときr=rand()*100 ; if ( r > 50 ) printf "%s,%s\n",V[before],before ;
任意の値を計算して50%を超えると印刷します。 (5%、95%に変更可能)