file, awk e iconv para adaptar automaticamente a codificação do arquivo tex

file, awk e iconv para adaptar automaticamente a codificação do arquivo tex

Eu tenho um conjunto de arquivos tex com codificações mistas, por exemplo (subconjunto de 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 convertê-los todos para utf-8, especialmente aqueles codificados iso-8859-1. Posso fazer isso manualmente usando (ou similar)

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

mas pensei que isso seria muito possível usando uma combinação do awkacima, ou seja, executando file -ia análise para combinações de arquivo/codificação usando awke executando a conversão de codificação de acordo usando iconv.

Meu conhecimento awké bastante limitado. Não fui além disso:

$ 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 será apreciada! Especialmente, não sei como posso retirar os dois pontos :e as charset=substrings das colunas.

Responder1

Parece que é muito melhor usar o sed aqui em vez do awk:

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

Ele executaria comandos que sedserão feitos com base na file -isaída. Se você quiser ver a lista de comandos sem executar, basta remover eo sinalizador no final do script sed assim:

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

informação relacionada