Если вы покупаете один из самых быстрых порта USB 3 флэш-накопители, которые могут сделать 5 Гбит/сек, вы будете ограничены для USB 2 скорости 480 МБ/секунду, тогда как SATA (внутренний) - общества с пропускной способностью 6 Гбит/сек. Он изначально медленнее выходят из ворот. Что сказал, это хорошо для диагностики проблем, а не для производительности. Я могу в значительной степени гарантировать, что это будет значительно быстрее с SSD. Вы пробовали (как root): `горе -о перемонтировать,РВ /системы и после редактирования файла hosts? Часть вашего ответа, что вообще-то соответствует моему вопрос сухари: они могут значительно быстрее, чем хлеб, и не нужно сушить отдельно, чтобы легко обрабатывать. Похоже, это корова на ферме, хотя: "_city ветеринары отказались приезжать сюда как корова cow_ ферма"

Можно установить SQLite базы данных и выполнить SQL выбирает из того, что, вероятно, будет чище, чтобы реализовать и настроить вас на более портативный позже.

Но вот примерное представление. Скажем, у меня есть 2 файла:

долларов больше index.txt new_vals.txt 
::::::::::::::
index.txt
::::::::::::::
1_,2_,4_,5_
::::::::::::::
new_vals.txt
::::::::::::::
5_,2_,1_,4
2_,5_,1_,4

С помощью этой команды мы можем соответствовать:

$ я $(<new_vals.txt); делать нумс=${я//_,/}; \
 грэп -ое "[${ключ}_,]+" index.txt; сделано
1_,2_,4_,5_
1_,2_,4_,5_

Это показывает, что мы можем соответствовать каждой линии от new_vals.txt к существующей линии index.txt.

Обновление #1

На основе редактирования ОП по Следующие будет делать то, что он хочет, используя модификацию вышеуказанного подхода.

$ я $(<new_vals.txt); делать 
 нумс=${я//_,/} 

 е "# проверка: [%с]" $я
 к=$(грэп -ое "[${ключ}_,]+" index.txt | команда grep "[[:цифра:]]_$")
 е "==> матч: [%с]\н" $к

сделано

С модифицированной версией тестовых данных:

долларов больше index.txt new_vals.txt 
::::::::::::::
index.txt
::::::::::::::
1_,2_,4_,5_
0_,2_,3_,9_
::::::::::::::
new_vals.txt
::::::::::::::
5_,2_,1_,4_
2_,5_,1_,4_
1_,1_,1_,1_
1_,2_,4_,4_

Теперь, когда мы запускаем выше (положить внутрь скрипта для простоты, парсер.Баш):

$ ./парсер.Баш 
# проверка: [5_,2_,1_,4_] ==> матч: [1_,2_,4_,5_]
# проверка: [2_,5_,1_,4_] ==> матч: [1_,2_,4_,5_]
# проверка: [1_,1_,1_,1_] ==> матч: []
# проверка: [1_,2_,4_,4_] ==> матч: []

Как это работает

Описанный выше метод работает, используя некоторые ключевые характеристики выставлены по характеру ваших данных. Например. Только матчи будут заканчиваться цифрой следует подчеркнуть. В команде grep "[[:цифра:]]_$" выбирает только этих результатов.

Другая часть скрипта, грэп -ое "[${ключ}_,]+" index.txt выберем строки, которые содержат символы из строки в файле new_vals.txt которые соответствуют строки из index.txt.

Дополнительные корректировки

Если природа данных такова, что строки могут быть разной длины, то 2-я команда grep должна быть расширена, чтобы гарантировать, что мы выбираем строки, которые имеют достаточную длину. Существует несколько способов для достижения этой цели, либо за счет расширения шаблону или с помощью счетчика, возможно, используя душ или некоторые другие средства, которые бы подтверждали, что матчи определенного типа.

Расширяя его, например, так:

к=$(грэп -ое "[${ключ}_,]+" index.txt | \
 команда grep "[[:цифра:]]_,[[:цифра:]]_,[[:цифра:]]_,[[:цифра:]]_$")

Позволит для ликвидации строки вроде этой:

$ ./parser2.Баш 
# проверка: [5_,2_,1_,4_] ==> матч: [1_,2_,4_,5_]
# проверка: [2_,5_,1_,4_] ==> матч: [1_,2_,4_,5_]
# проверка: [1_,1_,1_,1_] ==> матч: []
# проверка: [1_,2_,4_,4_] ==> матч: []
# проверка: [1_,2_,5_] ==> матч: []