Forum Programmation.shell Manipulation de fichier en sh

Posté par  .
Étiquettes : aucune
0
28
juin
2006
Bonjour,

J'ai un fichier contenant plusieurs lignes de ce type:
cours nom1prenom1 password idu nom1 nom2 prenom1 prenom2

Je lis le fichier avec:

cat fichier | while true ; do
read ligne
set -- $ligne
cours=$1
...
nom1=$5; nom2=$6; prenom1=$7; prenom2=$8

Sachant que nom2 et prenom2 peuvent ne rien contenir, comment peut-on attribuer ces 4 valeurs correctement ?

Par exemple, si il n'y a que nom1 et rien après, cela prend la valeur de début de ligne et me met un 0 à la fin (ca met un truc du style: nom1 cours0).

J'ai essayé en testant si nom2, prenom1, prenom2 était vide, ainsi que si ils avaient la valeur " ", mais cela ne semble pas marcher.

Ca fait vraiment un moment que je suis là-dessus, si quelqu'un pourrait m'aiguiller je serais vraiment soulagé :) merci
  • # Correction

    Posté par  . Évalué à 1.

    Le problème vient surtout de la commande:

    nom="$nom1 $nom2 $prenom1 $prenom2"
    /useradd -c "$nom" $login (je n'ai mis que l'essentiel)

    et ca m'affiche: "nom1 cours0" dans la gestionnaire de compte Linux, si il n'y avait que nom1 d'entré dans le fichier.
  • # mauvais outil

    Posté par  (site web personnel) . Évalué à 2.

    Je pense que ce serait plus simple avec une expression réulière, donc utilise plutôt gawk, python, perl ou sed.

    Sinon, quand un champ est vide, li y a quoi exactement ? les deux espaces qu'il y aurait du avoir autour du champ fantôme ?
    • [^] # Re: mauvais outil

      Posté par  . Évalué à 1.

      Oui, les 2 espace autour du champ fantome, mais je n'arrive pas à trouver comment faire un test sur ce champ fantome.

      Je ne pense pas que ce soit un espace normal, car il m'a créé un répertoire "cours_ 24", mais avec rm -fR cours\ 24, il ne le supprime pas.

      Je vais regardé comment fonctionne gawk.

      J'ai aussi essayé en partant de:
      "cours";"nom1prenom1";"password";"idu";"nom1 nom2";"prenom1 prenom2"

      J'arrive à mieux gérer les noms et prénoms, mais après passage de:
      cat fichier | tr '"' ' ' | tr ";" " "
      je reviens au même problème. Il me faudrait une étape intermédiaire pour extraire les valeurs en 2 fois... ;)
      • [^] # Re: mauvais outil

        Posté par  (site web personnel) . Évalué à 2.

        t'as regardé du coté de cut si ca peut te servir?
        • [^] # Re: mauvais outil

          Posté par  . Évalué à 1.

          oui, j'ai essayé avec cut -d";" -f1,2,3,4,5,6 (en prenant nomcompltet en 5 et prenomcomplet en 6).

          Je récupère bien les champs, mais je n'arrive pas à attribuer un des champs (comprenant plusieurs mots) à une variable (style nomcomplet=$5)

          Je pense que ce doit être simple, mais je n'ai pas encore trouvé.

          Avec gawk, j'ai fini par créer un script qui me générait le login et le mot de passe, mais je reviens au même problème qu'au début, à part que je m'approche un peu plus de ce que je voulais faire en commencant cette automatisation).

          En tout cas, je vois qu'il me reste encore pas mal de choses à apprendre :)
      • [^] # Re: mauvais outil

        Posté par  (site web personnel, Mastodon) . Évalué à 2.

        Je ne pense pas que ce soit un espace normal, car il m'a créé un répertoire "cours_ 24", mais avec rm -fR cours\ 24, il ne le supprime pas.

        Tu n'aurais pas oublié, ici en tout cas, le _ ?

        rm -rf cours_\ 24

        La gelée de coings est une chose à ne pas avaler de travers.

        • [^] # Re: mauvais outil

          Posté par  . Évalué à 1.

          non rien oublié dans le rm.

          Sur windows, ca affiche un carré comme espace. peut-être simplement le LF (j'ai fait énormément de test, alors c'est possible que j'ai essayé de créé des comptes linux avec un fichier texte modifié sur windows...).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.