file, awk e iconv para adaptar automáticamente la codificación de archivos tex

file, awk e iconv para adaptar automáticamente la codificación de archivos tex

Tengo un conjunto de archivos tex con codificaciones mixtas, por ejemplo (subconjunto de salida 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

Quiero convertirlos todos a utf-8, especialmente aquellos codificados iso-8859-1. Puedo hacer esto manualmente usando (o similar)

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

pero pensé que esto sería muy posible usando una combinación de awklo anterior, es decir, ejecutando file -iel análisis de esto para combinaciones de archivo/codificación usando awky realizando la conversión de codificación en consecuencia usando iconv.

Mi conocimiento awkes bastante limitado. No llegué más lejos que esto:

$ 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

¡Cualquier ayuda apreciada! Especialmente, no sé cómo puedo eliminar los dos puntos :y las charset=subcadenas de las columnas.

Respuesta1

Parece que es mucho mejor usar sed aquí en lugar de awk:

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

Ejecutaría comandos que sedse basarán en file -ila salida. Si desea ver la lista de comandos sin ejecutarlos, simplemente elimine ela marca al final del script sed de esta manera:

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

información relacionada