file, awk e iconv para adaptar automaticamente a codificação de arquivos tex

2

Eu tenho um conjunto de arquivos de texto com codificações mistas, por exemplo (subconjunto da saída de 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

Quero converter todos para utf-8 , especialmente os codificados iso-8859-1 . Eu posso fazer isso manualmente usando (ou similar)

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

mas achei que seria bem possível usar uma combinação de awk com o acima, ou seja, executando file -i analisando isso para combinações de arquivo / codificação usando awk e realizando a conversão de codificação adequadamente usando iconv . / p>

Meu conhecimento de awk é bastante limitado. Eu não tenho mais do que isso:

$ 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

Qualquer ajuda apreciada! Especialmente, não sei como posso remover os caracteres : e% substratos charset= das colunas.

    
por moooeeeep 17.04.2012 / 12:20

1 resposta

2

Parece que é muito melhor usar sed aqui do awk:

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

Ele executaria comandos que sed fará com base em file -i output. Se você quiser olhar a lista de comandos sem executar apenas remover e bandeira no final do script sed como este:

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