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 BINMODE
1 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 awk
2.
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
Cf. la documentation de gawk et la documentation de mawk. ↩︎
L’option
-v BINMODE=3
est inutile avecbusybox awk
. ↩︎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. ↩︎