Я думаю, для этого вам нужен более тяжелый язык программирования. Python - мой язык выбора, поэтому вот простой скрипт с простым примером теста:
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
Это, очевидно, только скелетный пример тестов, но он должен использоваться. Запустите нормально, он выведет только строки, которые не соответствуют STDOUT, и те, которые относятся к STDERR. Это делает его полезным для перенаправления в новый файл.
Здесь он находится в действии:
$ 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
Как только вы загрузили его шаблонами, вы можете просто передать его csv: python patterns.py input.csv
Что касается производительности, Python не всегда самый быстрый. my использует его, потому что он более чем достаточно быстрый для веб-разработки, и время для написания намного быстрее (это то, что стоит мне время / деньги).
Вы можете ускорить процесс с PyPy. Это альтернативная среда исполнения Python, которая отлично изучает. Возможно, вам не нужна версия PPA (Trusty ships 2.2, PPA - 2.3.1), но вот как вы это сделали:
sudo add-apt-repository ppa:pypy/ppa
sudo apt-get update
sudo apt-get install pypy
Затем вы запустили свой скрипт с помощью pypy script.py или если вы его выполнение напрямую изменяет открывание shebang на #!/usr/bin/env pypy. Я провел очень простое тестирование на входном файле с 350000 строк (ваш пример с удивительным успехом ) с вышеупомянутым скриптом.
python2 запустил его в 1.417s и pypy запустил его в 0.645s. По моему опыту, вы, вероятно, увидите еще большее улучшение с более сложными algos.
... Но да, ничто из этого не будет бить эквивалент C / C ++. Если время, затрачиваемое на запуск, это деньги, потратьте некоторое время на повторное выполнение этого на более быстром языке.
С reprepro вам не нужен файл изменений для загрузки файла deb. Есть подкоманда includedeb:
$ reprepro -b /var/www/repo includedeb xenial grep_3.1-2\~16.04.york0_amd64.deb
Exporting indices...
$ cd /var/www/repo; find pool
pool
pool/main
pool/main/g
pool/main/g/grep
pool/main/g/grep/grep_3.1-2~16.04.york0_amd64.deb
Измените -b /var/www/repo, чтобы найти место, где находится ваш корневой каталог reprepro.
С reprepro вам не нужен файл изменений для загрузки файла deb. Есть подкоманда includedeb:
$ reprepro -b /var/www/repo includedeb xenial grep_3.1-2\~16.04.york0_amd64.deb
Exporting indices...
$ cd /var/www/repo; find pool
pool
pool/main
pool/main/g
pool/main/g/grep
pool/main/g/grep/grep_3.1-2~16.04.york0_amd64.deb
Измените -b /var/www/repo, чтобы найти место, где находится ваш корневой каталог reprepro.
С reprepro вам не нужен файл изменений для загрузки файла deb. Есть подкоманда includedeb:
$ reprepro -b /var/www/repo includedeb xenial grep_3.1-2\~16.04.york0_amd64.deb
Exporting indices...
$ cd /var/www/repo; find pool
pool
pool/main
pool/main/g
pool/main/g/grep
pool/main/g/grep/grep_3.1-2~16.04.york0_amd64.deb
Измените -b /var/www/repo, чтобы найти место, где находится ваш корневой каталог reprepro.