com awk
:
awk -F, '$2 != ref { i++; ref = $2 } { print $0 >"output" i }' input
dividirá input
de acordo com a segunda coluna nos arquivos output1
, output2
...
Se você quiser limitar o número de linhas por arquivo de saída:
awk -F, '$2 != ref { i++; ref = $2; lines = 0 } lines >= 1000 { i++; lines = 0 } { print $0 >"output" i; lines++ }' input
produzirá arquivos de saída contendo no máximo 1000 linhas, respeitando a restrição na segunda coluna.
Aqui está outra variante, que divide na próxima alteração na segunda coluna após um determinado limite ter sido atingido (1000 linhas neste exemplo, você usaria 50000000 presumivelmente):
awk -F, 'BEGIN { change = 1 } change && $2 != ref { i++; ref = $2; change = 0; lines = 0 } lines >= 1000 { change = 1 } { print $0 >"output" i; lines++; ref = $2 }' input