file, awk и iconv для автоматической адаптации кодировки tex-файла

file, awk и iconv для автоматической адаптации кодировки tex-файла

У меня есть набор tex-файлов со смешанными кодировками, например (подмножество вывода file -i *.tex)

f1.tex: text/plain; charset=utf-8
f2.tex: text/plain; charset=utf-8
f3.tex: text/x-tex; charset=us-ascii
f4.tex: text/plain; charset=iso-8859-1
f5.tex: text/plain; charset=us-ascii

Я хочу преобразовать их все в utf-8, особенно те, которые закодированы iso-8859-1. Я могу сделать это вручную с помощью (или аналогичного)

iconv -f ISO-8859-1 -t UTF-8 f4.tex > tmp && mv tmp f4.tex

но я подумал, что это было бы вполне возможно, используя комбинацию awkс вышеизложенным, т. е. выполняя file -iсинтаксический анализ для комбинаций файл/кодировка с помощью awkи выполняя преобразование кодировки соответственно с помощью iconv.

Мои познания awkдовольно ограничены. Я не продвинулся дальше этого:

$ file -i *.tex | awk '{print $1, $3}'
f1.tex: charset=utf-8
f2.tex: charset=utf-8
f3.tex: charset=us-ascii
f4.tex: charset=iso-8859-1
f5.tex: charset=us-ascii

Любая помощь приветствуется! Особенно, я не знаю, как убрать двоеточие :и charset=подстроки из столбцов.

решение1

Кажется, здесь гораздо лучше использовать sed вместо awk:

file -i *tex | sed \ 
's/^\([^:]*\): .*set=\(.*\)/iconv -f \2 -t UTF-8 \1 > tmp \&\& mv tmp \1/e'

Он выполнит команды, которые sedбудут сделаны на основе file -iвывода. Если вы хотите посмотреть список команд без выполнения, просто удалите eфлаг в конце скрипта sed, как здесь:

file -i *tex | sed \
's/^\([^:]*\): .*set=\(.*\)/iconv -f \2 -t UTF-8 \1 > tmp \&\& mv tmp \1/'

Связанный контент