Смена кодировки файлов в Ubuntu, а так же iconv и большие файлы

$ file -i file.txt
file.txt: text/plain; charset=us-ascii

Давно в категории "Ubuntu" у меня не было материалов. Сегодня я исправлюсь и выпущу сразу две статьи. Итак, начнём. вам приходилось менять кодировку текстовых файлов в linux'e? А что если объем такого файла больше 10 Gb?!

Что бы изменить кодировку файла нужно использовать замечательную утилиту iconv. В параметрах необходимо указывать исходную кодировку

Как узнать кодировку файла в Linux

В этом нам поможет команда file:

$ file file.txt
file.txt: ASCII text, with no line terminators

Но лучше сразу с ключом -i.

$ file -i file.txt
file.txt: text/plain; charset=us-ascii

Изменить кодировку с помощью ICONV

Ну а далее вот такие действия:

iconv -f WINDOWS-1251 -t UTF-8 -o output_file.txt original_file.txt

где

  • -f WINDOWS-1251 - исходная кодировка, список исходных кодировок iconv -l, в команде работает tab, чтобы не опечататься
  • -t UTF-8 - конечная
  • -o output_file.txt - куда выводить результат
  • original_file.txt - исходный файл

Остальные ключики как обычно в man iconv.

iconv и большие файлы

Для быстрого выполнения процесса кодировки, iconv загружает файл в оперативную память и в swap. Но это работает только для небольших файлов. Если файл уж совсем большой, а ОЗУ не особо, то вы прост получите ошибку, мол "слишком большой файл", звиняйте хлопцы. Где взять такой файл? К примеру это может быть выборка из БД (игры для ipad, PC, PSP или другие данные)

Вот здесь предлагают различные решения данного вопроса: и скриптами, и разбивка на части, вывод в потоки, а потом обратно сборка в файл. Лично мне понравилось весьма простое решение: команда split - она позволяет разбить текстовый файл на более мелкие, а дальше с ними работать как угодно можно.

В простом варианте чтобы разбить файл на куски объёмом по 1Gb выполнить:

split -b 1000000000 file.txt

Это самые просты решения, эти команды можно использовать в различных скриптах и получить от этого много кайфов. Надеюсь эта заметка вам чем-то помогла.

 

 

Рубрики

Комментарии

пт, 08/30/2013 - 21:44

Смена кодировки файла в Linux http://yournet.kz/view/590

ср, 09/11/2013 - 18:17

Cпасибо, помогло, а вы не подскажете как узнать в какой кодировке файл? точнее его не читаемые куски вот для примера $content .= "

Кто онлаР в„–Р Р…: Нет пользователей Р В·Р В° последние 10 Р С

вт, 06/30/2015 - 15:22

Спасибо за подсказку, нужно было обработать таким образом более 500 файлов( файлы .vcf) вот пример скрипта использующего iconv для обработки всех файлов vcf находящихся в каталоге #!/bin/sh mkdir konvert_vcf for i in *.vcf ; do iconv -f WINDOWS-1251 -t UTF-8 -o konvert_vcf/"$i" "$i" done