Conversion des fins de lignes entre Unix et Windows

C’est la méthode la plus simple que j’aie trouvée. Elle nécessite de disposer d’un awk autorisant l’emploi d’expressions rationnelles comme séparateur d’enregistrements (RS). De plus, elle marche sur des fichiers comportant à la fois des fins de lignes Unix et DOS, sans ajouter de lignes blanches parasites.

L’utilisation de la variable BINMODE1 est optionnelle. Sur les awk compatibles, elle désactive les conversions implicites des fins de lignes.

Cette procédure a été testée avec gawk, mawk et busybox awk2. Elle ne marche pas avec le awk original.

Convertir des fins de lignes Unix (LF) en fins de lignes DOS (CR-LF)

Utiliser la commande awk suivante :

gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }'

Par exemple :

gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }' unix.txt > dos.txt

Pour vérifier le résultat (en remplaçant u8 par le code du codage utilisé si vous n’êtes pas en UTF-83) :

# Sans conversion
echo -e 'essai\nessai\r\nessai' \
 | recode u8..dump-with-names

# Avec conversion
echo -e 'essai\nessai\r\nessai' \
 | gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }' \
 | recode u8..dump-with-names

Convertir des fins de lignes DOS (CR-LF) en fins de lignes Unix (LF)

Utiliser la commande awk suivante :

gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\n' '{ print }'

Par exemple :

gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\n' '{ print }' dos.txt > unix.txt

Pour vérifier le résultat (en remplaçant u8 par le code du codage utilisé si vous n’êtes pas en UTF-8) :

# Sans conversion
echo -e 'essai\nessai\r\nessai' \
 | recode u8..dump-with-names

# Avec conversion
echo -e 'essai\nessai\r\nessai' \
 | gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\n' '{ print }' \
 | recode u8..dump-with-names

  1. Cf. la documentation de gawk et la documentation de mawk↩︎

  2. L’option -v BINMODE=3 est inutile avec busybox awk↩︎

  3. Par exemple l1 pour Latin 1 (ISO-8859-1) et l9 pour Latin 9 (ISO-8859-15), lancez recode -l pour obtenir la liste complète des codages. ↩︎