Trabalhar com esse tamanho de arquivos é sempre difícil.
Um caminho a seguir seria dividir esse arquivo em alguns pequenos,
para fazer isso, você pode usar o comando split.
split -d -l 50000 ToBigFile.data file_
Mesmo tu está dividido você ainda pode trabalhar com o arquivo como se fosse um usando um bash para loop
for f in 'ls file_*'; do cat $f; done;
Mas, em vez do gato, você pode usar o grep invertido para se livrar de dados indesejados, o que é irrelevante para isso. (ou o tipo de refinamento que você precisa).
Neste ponto, você só trabalhará com vários arquivos menores e os comandos mencionados acima funcionarão em muitos arquivos menores.
E quando estiver pronto, você pode usar um segundo loop para criar o novo arquivo menor novamente.
for f in 'ls file_*'; do cat $f >> NewFile.data ; done;
Atualizar
Como começamos a dividir os dados em vários arquivos, haverá muito trabalho com o disco rígido e isso levará tempo. (Nesta pergunta aparentemente 5min).
Por outro lado, os próximos passos provavelmente seriam mais rápidos.
Portanto, este método é provavelmente inútil para operações grep, awk, sed simples,
mas se os padrões de pesquisa se tornarem mais complicados, poderá se tornar mais rápido.