Мне нужно написать программу, которая будет записывать в файл разницу между двумя файлами. Программа должна пройти через файл 600 МБ с более чем 13.464.448 строк, проверить, возвращает ли grep true в другой файл, а затем записывает результат в другой файл. Я написал быстрый тест с около 1.000.000 записей, и потребовалось более часа, поэтому я предполагаю, что этот подход может занять 9 часов.Сравнение двух больших файлов
Есть ли у вас рекомендации относительно того, как сделать это быстрее? Любой конкретный язык, который я должен использовать? Я планировал сделать это в bash или python.
Большое спасибо.
[EDIT 1]: Извините, когда я говорю разницу между двумя файлами, я не имел в виду разницу. Файл результатов находится в другом формате.
Логика немного так:
Файл А имеет 297.599 линии Файл B имеет более 13 миллионов строк
Я выбираю текущую строку быть чтение из файла A, Grep его на FILE B, и если строка присутствует в файле B, я напишу ее в файл результатов. Кстати, файлы A и B имеют разные форматы. Результат файл будет иметь формат файла А.
[EDIT 2]: меня попросили на работе, чтобы создать решение Баш идеально, так что мы не должны устанавливать питон на всех машинах это должно работать на.
Это моя curent реализация:
#!/bin/bash
LAST_TTP=`ls -ltr TTP_*.txt | tail -1 | awk '{ print $9 }'`
LAST_EXP=`ls -ltr *.SSMT | tail -1 | awk '{ print $9 }'`
while read -r line; do
MATCH="$(grep $line $LAST_EXP)"
echo "line: $line, match: $MATCH"
# if not empty
if [ ! -z "$MATCH" ]
then
echo $MATCH >> result
fi
done < $LAST_TTP
Этот Баш подход занимает более 10 часов, чтобы закончить. Есть ли у вас какие-либо предложения о том, как сделать его более эффективным в bash?
Большое спасибо!
Использование утилиты diff? – dda
Возможно, если бы вы показали какой-то код, мы могли бы помочь его оптимизировать. –
Я не совсем понимаю, чего вы пытаетесь достичь, но если ваше описание будет правильным, оно будет улучшено, если вы будете сортировать эти файлы. – vartec