Я использую Cygwin для объединения нескольких файлов. Тем не менее, я хотел знать, правильный ли мой подход или нет. Это и вопрос, и обсуждение :)
Сначала немного информации о файлах, которые у меня есть:
- Оба файла имеют символы ASCII, а также символы NON ASCII.
- Файл1 содержит 7899097 строк и имеет размер ~ 70,9 МБ.
- Файл2 содержит 14344391 строк и имеет размер ~ 136,6 Мб.
Информация о кодировке файла:
$ file -bi file1.txt
text/x-c++; charset=unknown-8bit
$ file -bi file2.txt
text/x-c++; charset=utf-8
$ file -bi output.txt
text/x-c++; charset=unknown-8bit
Это метод, которым я следую, чтобы объединить два файла, отсортировать их, а затем удалить все повторяющиеся записи:
- Я создаю временную папку и помещаю в нее оба текстовых файла.
Я запускаю следующие команды, чтобы объединить оба файла, но сохраняю разрыв строки между двумя
for file in *.txt; do cat $file >> output.txt echo >> output.txt done
Полученный файл output.txt содержит 22243490 строк и имеет размер 207,5 Мб.
Теперь, если я запускаю на нем команду сортировки, как показано ниже, я получаю сообщение об ошибке, поскольку внутри него присутствуют символы, отличные от ASCII (возможно, юникод, широкие символы):
sort -u output.txt
string comparison failed: Invalid or incomplete multibyte or wide character
Итак, я установил для переменной среды LC_ALL значение C, а затем выполнил команду следующим образом:
cat output.txt | sort -u | uniq >> result.txt
И в результате.txt содержит 22243488 строк и имеет размер 207,5 Мб.
Итак, result.txt совпадает с output.txt.
Теперь я уже знаю, что в output.txt много повторяющихся записей, тогда почему приведенные выше команды не могут удалить повторяющиеся записи?
Кроме того, учитывая большой размер файлов, я хотел знать, является ли это эффективным методом объединения нескольких файлов, их сортировки, а затем их уникальности?