Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 11/01/2010, 14h58   #1
Membre habitué
 
Inscription : mai 2007
Messages : 138
Détails du profil
Informations personnelles :
Âge : 59

Informations forums :
Inscription : mai 2007
Messages : 138
Points : 108
Points : 108
Par défaut HP-UX - sed et awk line too long

Bonjour,

sous HP-UX, je dois faire des modifications (substitution d'une chaîne par une autre de même longueur) dans un fichier qui contient des lignes de texte > 3000c

sed, awk et vi refusent obstinement de faire quoique ce soit. La limite pour ces utilitaires est de 3000c ( c'est un peu nul pour un système 64bits !!!!)

Comment faire ?

Merci pour votre aide
noooop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 15h19   #2
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Bonjour noooop,

As-tu, sous HP-UX, la commande split? Avec une boucle qui coupe le fichier en "morceaux" de 1000 lignes (split -l 1000), fait les traitements puis réassemble avec un joli cat, ce serait possible...
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 15h20   #3
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 664
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 664
Points : 1 196
Points : 1 196
Une solution consiste a utiliser gawk ou nawk
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 15h22   #4
Membre habitué
 
Inscription : mai 2007
Messages : 138
Détails du profil
Informations personnelles :
Âge : 59

Informations forums :
Inscription : mai 2007
Messages : 138
Points : 108
Points : 108
je regarde ..... réponse dans 2minutes
Citation:
Une solution consiste a utiliser gawk ou nawk
Je ne peux pas installer ces utilitaires
Citation:
Split
J'ai oublié une précision; le fichier en question est un fichier xml qui contient de l'XML encodé. Donc si je le coupe arbitrairement le traitement de la substitution risque d'être chaude à faire.

Après il faut que je défasse l'opération split et donc remettre à plat ma structure XML (ce n'est pas moi qui génère le xml. Ce serait trop simple)
noooop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 15h36   #5
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Oops, j'ai compris! Ce sont les lignes qui font plus de 3000 caractères, pas le fichier qui fait plus de 3000 lignes! Okay, je réfléchis...
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 15h41   #6
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 664
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 664
Points : 1 196
Points : 1 196
Si tu ne peux pas utiliser nawk ou gawk, la solution solution qui reste à mon avis, c'est d'écrire un programme en C
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 15h44   #7
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Bon, avec ton shell adoré (Bash, KSH) peux-tu travailler avec les variables? Du genre:
Code :
newLine=${oldLine/pattern/string}
Toussa dans une jolie boucle avec un while read qui va bien?
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 15h53   #8
Membre habitué
 
Inscription : mai 2007
Messages : 138
Détails du profil
Informations personnelles :
Âge : 59

Informations forums :
Inscription : mai 2007
Messages : 138
Points : 108
Points : 108
Citation:
Envoyé par jmelyn Voir le message
Bon, avec ton shell adoré (Bash, KSH) peux-tu travailler avec les variables? Du genre:
Code :
newLine=${oldLine/pattern/string}
Toussa dans une jolie boucle avec un while read qui va bien?

Bingo....je cherchais dans ksh. Oui j'arrive à affecter aux variables des longueurs conséquentes. Je vais tester de ce pas. Merci BEAUCOUP !!!!

Sinon, il me restera a développer ça en C, si le temps de traitement est trop long en shell
noooop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 16h27   #9
Membre habitué
 
Inscription : mai 2007
Messages : 138
Détails du profil
Informations personnelles :
Âge : 59

Informations forums :
Inscription : mai 2007
Messages : 138
Points : 108
Points : 108
Je viens d'essayer ca depuis le manuel KSH:

Code :
1
2
3
#!/bin/ksh
X=abcabcabc
print ${X//abc/xyz}
Voilà le résultat:

Code :
1
2
3
$ ./t2.sh
./t2.sh[3]: ${X//abc/xyz}: bad substitution
$
Je suis dégouté !!!! Dans le manuel KSH ca marche. Pas sur HP-UX
noooop est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 17h08   #10
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 129
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 129
Points : 8 749
Points : 8 749
Citation:
Dans le manuel KSH ca marche. Pas sur HP-UX
Ca depend donc de la version de ksh que tu utilises...

Donc a moins que tu ne puisses la mettre a jour, tu vas devoir trouver une autre solution...
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2010, 14h57   #11
Membre habitué
 
Inscription : mai 2007
Messages : 138
Détails du profil
Informations personnelles :
Âge : 59

Informations forums :
Inscription : mai 2007
Messages : 138
Points : 108
Points : 108
Après de multiples recherche, j'ai essayé la commande ed. Mais là aussi celà ne marche pas. Donc pour résumer: sous hp-ux sed, grep, awk et ed ne fonctionne pas sur des fichiers qui contiennent des lignes de longueur supérieur a 3000c.

Résolu en utilisant Perl
noooop est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 19h02.


 
 
 
 
Partenaires

Hébergement Web