Paso de archivos DOS a UNIX

Cuando un archivo de texto DOS se pasa a una maquina UNIX, pueden aparecer ^M al final de cada línea, debido a las distintas convenciones de cada sistema operativo.

Si el archivo problemático se llama datafile, aquí van tres maneras de resolver el problema:

  1. Usando el comando tr.

    Sabiendo que ^M es ASCII 13 decimal, pero 15 en octal:

    tr -d '\015' < datafile > TEMPFILE 
    mv -f TEMPFILE datafile
    
    TEMPFILE es un archivo temporal.

  2. Usando el comando dos2unix.

    En Debian, instalando el paquete sysutils, queda instalado el comando dos2unix. Su uso es más sencillo que la solución anterior:

    dos2unix datafile
    

  3. Usando el editor Emacs/XEmacs.

    En el archivo de configuración ~/.emacs, incluir el siguiente código:

    ;; dos2unix (borra ^M al final)
    
    (defun dos2unix()
       (interactive)
       (while (not (looking-at "^$"))
         (end-of-line)
         (delete-backward-char 1)
         (beginning-of-line)
         (next-line 1))
    )
    
    La primera línea es un comentario, el resto define un nuevo comando, llamado dos2unix. Cuando se abre un archivo DOS en XEmacs, se ven los ^M al final de cada línea. Entonces uno invoca el nuevo comando por nombre:
    Alt-x dos2unix
    
    y los ^M son eliminados.

    Nota: Este comando no es perfecto. Por razones que no entiendo, hay algunos tipos de archivos (no he identificado cuáles) para los cuales los ^M son borrados sólo hasta cierto punto. Basta dar otro Alt-x dos2unix para continuar con el resto del archivo.
        Además, se puede apreciar que el comando simplemente recorre línea por línea, y borra el último caráracter. Esto supone que hay un ^M al final de todas las líneas, lo cual a veces no es cierto para la última línea, en cuyo caso el comando termina borrando el último carácter, que puede ser relevante.
        La moraleja es que hay que estar atento, pero me gusta esta solución dentro del XEmacs, porque normalmente lo que ocurre es que uno se da cuenta que están esos ^M al abrir el archivo con el editor, y es un poco incómodo tener que salir al shell para llamar a dos2unix, por ejemplo.
        Algún día mejoraremos el comando dos2unix() de Emacs.


Página de tips
Victor Munoz
Last modified: Wed May 29 19:35:31 CLT 2002