Forum Programmation.shell modification de ficier ligne commancant par lov et supprimer carartère

Posté par  .
Étiquettes : aucune
0
20
oct.
2008
Bonjour,

Je ne suis pas un spécialiste en shell mais je sois modifier un fichier sous unix.

Je dois modifier toutes les ligne dans ce fichier commancant par LOV :

LOV "D151008-E1" "ORGANIZATION" "10200"
LOV "D151008-E2" "ORGANIZATION" "10201"

et je dois supprimer les "" autour des 2 derniers champs ( ORGANIZATION et le nombre).

Merci d'avance
Cordialement
Thiabutbito
  • # Awk

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

    awk '/^LOV/ {gsub("\"","",$0)} {print $0}' fichier_entree > fichier_sortie

    Petite explication pour la culture :

    awk parcours le fichier en entrée et éxecute les instructions présentes entre les ' '

    /^LOV/ {gsub("\"","",$0)} : si la ligne courante commence par LOV on remplace les " par rien
    {print $0} : on affiche la ligne en cours quelqu'elle soit
    • [^] # Re: Awk

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

      Arf j'ai zappé le "autour des 2 derniers champs ( ORGANIZATION et le nombre)."

      dans ce cas une simple modification :

      awk '/^LOV/ {gsub("\"","",$3);gsub("\"","",$4)} {print $0}' fichier_entree > fichier_sortie

      Ainsi on applique le gsub seulement sur le 3ème et le 4ème champ
      • [^] # Re: Awk

        Posté par  . Évalué à 1.

        Merci ca fonctionne à merveille.
        Encore un grand merci pour ce gain de temps.
        Cordialement
        Thibautbito
      • [^] # Re: Awk

        Posté par  . Évalué à 0.

        Merci ca fonctionne à merveille.
        Encore un grand merci pour ce gain de temps.
        Cordialement
        Thibautbito
  • # Pas trop dur

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

    Que penses tu de
    awk '{print $1 " " $2}' fichier

    ?
    • [^] # Re: Pas trop dur

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

      Comme je sais pas si tu dois modifier que les lignes qui commencent par LOV, ou si tu indiquais que toutes tes lines commencent ainsi, je propose aussi ça :
      awk '{if ( /^LOV/ ) print $1 " " $2; else print}' fichier
      • [^] # Re: Pas trop dur

        Posté par  . Évalué à 1.

        Bonjour,
        Ca ne marche pas car cela supprime les 2 derniers champs alors qu'il ne devrait que supprimer les "" autours des 2 derniers.
        Merci comme même
        Thibautbito
  • # SED hatif

    Posté par  . Évalué à 3.

    Sans doute plus lent que awk sur ce coup-là, mais c'est possible avec sed également: sed '/^LOV/ {s/"\([^"]*\)"\(.\)"\([^"]*\)"$/\1\2\3/}' input > output
    • [^] # Re: SED hatif

      Posté par  . Évalué à 2.

      rhaaa lovely, je viens encore d'apprendre un truc sur sed !

      Je vous défie de faire plus court :)

      sed -ie 's/"//3g' input
      • [^] # Re: SED hatif

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

        sed -ie s/\"//3g input

        mais ça ne répond pas exactement au problème, et crée une sauvegarde inpute. Plutôt :

        sed -i -e /^LOV/s/\"//3g input

        (ou -i.old pour l'extension de sauvegarde).
        • [^] # Re: SED hatif

          Posté par  . Évalué à 1.

          bien vu ! j'avais zappé "LOV"
          • [^] # Re: SED hatif

            Posté par  . Évalué à 1.

            Sympa le 3g, mais pas POSIX d' après l'info de sed:
            `NUMBER'
                 Only replace the NUMBERth match of the REGEXP.
                 Note: the POSIX standard does not specify what should happen
             when you mix the `g' and NUMBER modifiers, and currently there is no
             widely agreed upon meaning across `sed' implementations.  For GNU
             `sed', the interaction is defined to be: ignore matches before the
             NUMBERth, and then match and replace all matches from the
             NUMBERth on.
            
            • [^] # Re: SED hatif

              Posté par  . Évalué à 1.

              Ah ouais, précision effectivement importante !
              C'est con, c'était justement ça qui m'avait fait tripper ;-)

Suivre le flux des commentaires

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