Eu acho que você precisa de uma linguagem de programação mais pesada para isso. Python é a minha linguagem de escolha, então aqui está um script simples com um exemplo simples de teste:
import sys
tests = [
lambda a, b, c, d, e: a+1==b and b+1==c and c+1==d and d+1==e,
]
with open(sys.argv[1]) as f:
for line in f:
if any(t(*map(int, line.split(','))) for t in tests):
sys.stderr.write('Line removed: %s\n' % line)
continue
print line
Isso é obviamente apenas um exemplo esquelético de testes, mas deve ser utilizável. Corra normalmente, ele irá mostrar apenas as linhas que não correspondem ao STDOUT e as que fazem ao STDERR. Isso é útil para redirecionar para um novo arquivo.
Aqui está em ação:
$ python patterns.py <(echo -n 1,2,3,4,5)
Line removed: 1,2,3,4,5
$ python patterns.py <(echo -n 1,2,4,4,5)
1,2,4,4,5
Depois de carregá-lo com padrões, basta passar o csv: python patterns.py input.csv
Em termos de desempenho, o Python nem sempre é o mais rápido. Eu uso porque é mais do que rápido o suficiente para o desenvolvimento da web e o tempo para escrever é muito mais rápido (que é o que me custa tempo / dinheiro).
Você pode acelerar as coisas com o PyPy. Este é um tempo de execução alternativo do Python que pontos de referência surpreendentemente bem . Você pode não precisar da versão do PPA (Trusty ships 2.2, PPA é 2.3.1), mas aqui está como você faria:
sudo add-apt-repository ppa:pypy/ppa
sudo apt-get update
sudo apt-get install pypy
Você lançaria seu script com pypy script.py
ou, se estiver executando, altere diretamente a abertura para #!/usr/bin/env pypy
. Eu fiz alguns testes muito simples em um arquivo de entrada de linha 350000 (seu exemplo repetido 50000 vezes). a>) com o script acima.
python2
executou em 1.417s e pypy
executou em 0.645s
. Na minha experiência, você provavelmente verá uma melhora ainda maior com algos mais complicados.
... Mas sim, nada disso vai bater o equivalente C / C ++. Se o tempo de execução for dinheiro, passe algum tempo reimplementando-o em um idioma mais rápido.