IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Des codes sources perlConsultez toutes les FAQ

Nombre d'auteurs : 13, nombre de questions : 59, dernière mise à jour : 27 mai 2011 

 
OuvrirSommaire → Quelques unilignes perl → Traitements de fichiers

WindowsLinuxMac

Ce code vous permettra de convertir un fichier plat DOS en UNIX en convertissant les retours chariots vers le format unix. Cela permet de supprimer les ^M dans un fichier Mac par exemple. Cela est également pratique pour les fichiers transferés en FTP en mode binaire au lieu de ASCII. C'est léquivalent d'un dos2unix.

 
Sélectionnez
perl -pi.bak -e "s/\r\n/\n/" mon_fichier.txt

Ce code fait une sauvegarde préalable du fichier et supprime les ^M de mon_fichier.txt.

 
Sélectionnez
perl -pi -e "s/\r\n/\n/" mon_fichier.txt

Fait la même chose sans sauvegarde.

Créé le 2011-02-18  par djibril

Windows

Attention : bien qu'efficace, cette méthode est consommatrice de mémoire si vous l'appliquez sur un très gros fichier car ce dernier est entièrement chargé en mémoire.

 
Sélectionnez
perl -ne "print if ! $lignes{$_}++" mon_fichier.txt > nouveau_fichier.txt

Linux Mac

 
Sélectionnez
perl -ne 'print if ! $lignes{$_}++' mon_fichier.txt > nouveau_fichier.txt
Mis à jour le 2011-03-16  par djibril

WindowsLinuxMac

Il peut être utilise d'avoir une petite commande perl permettant de modifier un mot dans un fichier. Cet uniligne est là pour ça. Dans l'exemple ci-dessous, nous changeons le nom de domaine yahoo.fr par developpez.com dans un fichier XML.

annuaire.xml
Sélectionnez
<annuaire>
  <personne>
    <nom>Philou</nom>
    <prenom>Jean-Francois</prenom>
    <telephone>01234567890</telephone>
    <email>toto@yahoo.fr</email>
  </personne>
  <personne>
    <nom>Dupont</nom>
    <prenom>Paul</prenom>
    <telephone>09876543210</telephone>
    <email>titi@yahoo.fr</email>
  </personne>
</annuaire>
avec sauvegarde du fichier original
Sélectionnez
perl -pi.sauvegarde -e "s/yahoo\.fr/developpez\.com/g" annuaire.xml
Créé le 2011-02-22  par djibril
Windows
Sélectionnez
perl -ne "chomp; print join qq{ }, @{[ split /;/ ]}[8,0],$/" fichier.csv
Linux/Unix
Sélectionnez
perl -ne 'chomp; print join qq{ }, @{[ split /;/ ]}[8,0],$/' fichier.csv

WindowsLinux

Dans ce code, l'expression régulière du split constitue le séparateur de colonne du fichier d'entrée passé en paramètre (le retour à la ligne est considéré comme le séparateur de ligne). Les colonnes affichées dans l'exemple sont les colonnes d'indice 8 et 0, dans cet ordre. Elles sont affichées avec le paramètre du join comme séparateur.

fichier.csv
Sélectionnez
col0;col1;col2;col3;col4;col5;col6;col7;col8;col9;col10
test1;test2;test3;test4;test5;test6;test7;test8;test9;test10;test11
resultat
Sélectionnez
col8 col0
test9 test1

Il est possible de raccourcir le code via les options -a -F et -l.

Windows
Sélectionnez
perl -laF';' -ne "print join q( ), @F[8,0]" fichier.csv
Linux/Unix
Sélectionnez
perl -laF';' -ne 'print join qq( ), @F[8,0]' fichier.csv

Ce code correspond à un code perl complet suivant :

 
Sélectionnez
#!/usr/bin/perl
$\ = $/;                            # option -l
while (<>) {                        # option -n
  chomp $_;                         # options -l et -n
  @F = split /;/;                   # option -a et -F
  print join qq( ), @F[8,0];        # option -e
}
Mis à jour le 2011-05-11  par Philou67430, Alek-C, djibril

Windows Linux Mac

 
Sélectionnez
perl -e "print scalar reverse <>" fichier
Mis à jour le 2011-03-16  par djibril
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.