У меня есть 2958616 байт текстовый файл. При запуске sort < file.txt | uniq > sorted-file.txt
я получаю текстовый файл размером 3213965 байт. Почему мой отсортированный текстовый файл больше?
Вы можете скачать текстовые файлы здесь .
text-processing
wb9688
источник
источник
\r\n
окончания строк, тогда как входной файл имеет\n
окончания строк. Возможно, вы должны установить свой язык по-другому. ПопробуйтеLC_ALL=C
перед каждой командой.locale
? Вы уверены, что не создали файл в какой-либо другой системе?sed '/^[a-z]*$/d' < file.txt | wc -l
дал мне 305 строк.â ê î ñ ô ö öö û
те, которые не входят в набор ASCII.Ответы:
В то время как ваш исходный файл имеет строки, которые заканчиваются
\n
, ваш отсортированный файл имеет\r\n
. Дополнение -\r
это то, что меняет размер.Чтобы проиллюстрировать это, вот что происходит, когда я запускаю вашу команду в моей системе Linux:
Как вы можете видеть, отсортированный дедуплицированный файл на несколько строк короче и, следовательно, на несколько байтов меньше. Ваш файл, однако, отличается:
Два файла имеют одинаковое количество строк, но:
Тот
sorted-file.txt
, который я скачал по вашей ссылке, больше. Если мы теперь рассмотрим первую строку, мы можем увидеть дополнительную\r
:Которые отсутствуют в том, что я создал в Linux:
Если мы сейчас удалим
\r
из вашего файла:Мы получаем ожидаемый результат, файл, который меньше исходного, точно так же, как тот, который я создал в моей системе:
источник
\r\n
окончания строк - это вещь для Windows.hexdump
показывает это!Ваш отсортированный файл больше, потому что он использует окончания строки Windows
\r\n
(два байта) вместо окончания строки Linux\n
(один байт).Может быть, вы запускали эту команду выше под Windows, используя либо такие инструменты, как
cygwin
или эту новую подсистему Linux для Windows 10? Или ты что-то запускал в Wine?источник