Limite buffer SED ???

BONSOIR,

Suite à l'aide de JIPLICY, avec comme exemple fich01.txt et le .sh ci dessous on a sans probleme le resultat
attendu, voir tout en bas. (Effacement de doublons)

PROBLEME : Quand le nombre de ligne devient grand mon systeme cygwin plante en me donnant comme messages :

sed: cannot rename ./sedXXXXX: permission denied
sed: cannot rename ./sedXXXXX: permission denied
sed: cannot rename ./sedXXXXX: permission denied
.....
....

$ cat fich01.txt

Champ ref : 001 ABC de la phrase. Champ ref : 001 ABC de la phrase. Champ ref : 001 ABC de la phrase. Champ ref : 001 ABC de la phrase.
Champ ref : 002 DEF de la phrase. Champ ref : 002 DEF de la phrase. Champ ref : 002 DEF de la phrase. Champ ref : 002 DEF de la phrase.
Champ ref : 003 GHI de la phrase. Champ ref : 003 GHI de la phrase. Champ ref : 003 GHI de la phrase. Champ ref : 003 GHI de la phrase.

$ cat tht123.sh

#! /bin/bash

while read line
do
var=$(echo "$line" | sed 's/.\{6\}\(.\{18\}\).*/\1/')
while [ $(grep -o "$var" <<<"$line" | wc -l) -gt "1" ]
do
sed -i '/'"$var"'/ s///2' "fich01.txt"
line=$(sed -n '/'"$var"'/p' "fich01.txt")
done
done < fich01.txt

$ ./tht123.sh

[jp@MDK tmpfs]$ cat fich01.txt

Champ ref : 001 ABC de la phrase. Champ de la phrase. Champ de la phrase. Champ de la phrase.
Champ ref : 002 DEF de la phrase. Champ de la phrase. Champ de la phrase. Champ de la phrase.
Champ ref : 003 GHI de la phrase. Champ de la phrase. Champ de la phrase. Champ de la phrase;

merci++++++

7 réponses

  1. Modérateur
    Salut,

    Quelle version de "sed" as-tu ?
    Maximum size for all buffers (pattern space + hold space)
    
          GNU sed:        no limit
          ssed:           no limit
          sedmod v1.0:    4096 bytes
          HHsed v1.5:     4000 bytes
          sed v1.6:       [pending]
    
    ;-))
    0
    1. Modérateur
      Salut,

      toutefois :-))

      Specifically, use awk or perl if you need to:

      * count fields or words on a line. (awk)
      * count lines in a block or objects in a file.
      * check lengths of strings or do math operations.
      * handle very long lines or need very large buffers. (or gsed)
      * handle binary data (control characters). (perl: binmode)
      * loop through an array or list.
      * test for file existence, filesize, or fileage.
      * treat each paragraph as a line. (well, not always)

      0
      1. Hello,

        Comment as tu obtenu ces infos??
        En tappant :

        sed --v j'ai juste le n° de version 4.1.5

        D'autre part, il semble préférable de traduire ??

        BAT
        0
        1. Modérateur
          Salut,

          D'autre part, il semble préférable de traduire ??


          Je te l'accorde vu qu'on est sur un site francophone
          Je te conseil aussi de faire un alias pour sed (dans l'idée de rester toujours en français :-))
          alias dit='sed'

          Source de l'info http://www.student.northpark.edu/pemente/sed/sedfaq6.html
          Specifically, use awk or perl if you need to:
          Avec la spécification d'utiliser awk ou perl si vous avez besoin de :

          * count fields or words on a line. (awk)
          compter les champs ou mots sur un linge

          * count lines in a block or objects in a file.
          compter des blocs de lignes ou des objets dans un fichier.

          * check lengths of strings or do math operations.
          calculer la longueur des chaines ou faire des opérations mathématiques

          * handle very long lines or need very large buffers. (or gsed)
          traiter les lignes très longues ou avoir besoin de grands buffers - tampons

          * handle binary data (control characters). (perl: binmode)
          pour des données binaires (control de caractères)

          * loop through an array or list.
          utilisation des tableaux ou list pour utilisation de boucles

          * test for file existence, filesize, or fileage.
          tester l'existence, taille ou date fichier

          * treat each paragraph as a line. (well, not always)
          traiter chaque paragraphe en tant que ligne (ce n'est pas la chose à faire tout le temps)
          0
      2. Modérateur
        Pour ma part mes infos viennent de : http://sed.sourceforge.net/sedfaq.html

        Quant à toi, c'est donc la version de GNU sed (gsed) que tu as d'installée, et si on s'en réfère aux infos de lami20j, ça devrait passer :

        * handle very long lines or need very large buffers. (or gsed)

        ??
        0
        1. Aille,

          Pouvez vous m'aider sur l'utilisation de awK??
          Si j'ai pigé awk c un peu comme sed on peut matcher des regex et effectuer des boucles?

          Y a t il un : "while read line" ou alors dois-je utiliser

          While (not(eof))

          do

          SVP
          0
          1. Meric,

            Je m'y plonge!!

            BAT
            0