Limite buffer SED ???

Fermé
tht123 Messages postés 72 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 10 janvier 2009 - 10 juin 2007 à 20:49
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 11 juin 2007 à 10:29
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

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 juin 2007 à 20:57
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
10 juin 2007 à 21:07
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
tht123 Messages postés 72 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 10 janvier 2009
10 juin 2007 à 21:32
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
11 juin 2007 à 10:29
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 juin 2007 à 21:41
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tht123 Messages postés 72 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 10 janvier 2009
10 juin 2007 à 22:00
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 juin 2007 à 22:08
Re-

Tiens je te file 2 liens :
https://www.grymoire.com/Unix/Awk.html
http://www.salemioche.net/gawk.php

Sinon, "awk" possède bien une instruction "while", et tu peux matcher des regex.
0
tht123 Messages postés 72 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 10 janvier 2009
10 juin 2007 à 22:45
Meric,

Je m'y plonge!!

BAT
0