500 milhões de linhas são muitos dados, por isso talvez você queira procurar uma forma mais escalonável de lidar com o trabalho. Dito isso, fazer isso com utilitários padrão do Linux é possível.
Supondo que seus dados estejam em um arquivo chamado data.txt
, você pode imprimi-los no terminal usando cat
:
$ cat data.txt
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
Esta saída pode então ser canalizada para sort
com as opções -t ',' -k 2
. Essas opções dirão sort
para dividir os dados usando uma vírgula como delimitador e, em seguida, classificar pelos valores na segunda coluna:
$ cat data.txt | sort -t ',' -k 2
2854.11,18:f6:43:64:81:67
3540.68,18:f6:43:64:81:67
1616.93,ac:22:0b:a6:22:c3
3856.91,ac:22:0b:a6:22:c3
2872.32,c0:bd:d1:36:bb:49
2497.93,d4:0b:1a:39:19:b2
3314.55,d4:0b:1a:39:19:b2
Para sua próxima tarefa, você deverá usar sort
com as opções -t ',' -k 1 -r
. Isso classificará usando uma vírgula como o delimitador e o valor na primeira coluna. O -r
classificará em ordem de revisão, fornecendo as maiores entradas primeiro:
$ cat data.txt | sort -t ',' -k 1 -r
3856.91,ac:22:0b:a6:22:c3
3540.68,18:f6:43:64:81:67
3314.55,d4:0b:1a:39:19:b2
2872.32,c0:bd:d1:36:bb:49
2854.11,18:f6:43:64:81:67
2497.93,d4:0b:1a:39:19:b2
1616.93,ac:22:0b:a6:22:c3
Você desejará enviar a saída do exemplo acima para sort
novamente, desta vez usando as opções -t ',' -k 2 -u
. Como antes, -t ','
e -k 2
dizem ao sort para usar a segunda coluna, enquanto a nova opção -u
diz ao sort para manter apenas entradas únicas.
Como classificamos os dados pelos valores da primeira coluna, ao encontrar as entradas exclusivas, as mais altas serão encontradas primeiro. Isso nos dará o maior valor único para cada endereço MAC:
$ cat data.txt | sort -t ',' -k 1 -r | sort -t ',' -k 2 -u
3540.68,18:f6:43:64:81:67
3856.91,ac:22:0b:a6:22:c3
2872.32,c0:bd:d1:36:bb:49
3314.55,d4:0b:1a:39:19:b2
Finalmente, para obter uma amostra aleatória, você pode usar shuf
com a opção -n 2
, em que dois é quantas amostras aleatórias você deseja:
$ shuf data.txt -n 2
3856.91,ac:22:0b:a6:22:c3
3314.55,d4:0b:1a:39:19:b2