Shell unix : Remplacement de valeurs à partir d'un fichier
Résolu
agobats
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
dna.factory Messages postés 25982 Date d'inscription Statut Modérateur Dernière intervention -
dna.factory Messages postés 25982 Date d'inscription Statut Modérateur Dernière intervention -
A voir également:
- Shell unix : Remplacement de valeurs à partir d'un fichier
- Classic shell - Télécharger - Personnalisation
- Shell addition ✓ - Forum Shell
- Ssh secure shell download - Télécharger - Divers Web & Internet
- Shell startup windows 10 - Guide
- Shell infrastructure host c'est quoi - Guide
3 réponses
$ cat table
orange pomme
banane kiwi
fraise framboise
peche abricot
$ cat out
peche France
orange Maroc
peche Nouvelle-Zelande
fraise Espagne
$ join -1 1 -2 1 -o 1.2 2.2 <(sort table) <(sort out)
framboise Espagne
pomme Maroc
abricot France
abricot Nouvelle-Zelande
sur Solaris, utiliser nawk à la place de awk
Bonjour,
Avec la commande nawk ça ne passe pas j'ai le message suivant :
nawk : syntax error at source line
context is '/[(]/ {t[$1]=$2; next} >>> /= <<<
nawk: bailing out at source line 1
Avec les commande sed, j'ai le message :
Cannont open pathern-file
Désolé pour le dérangement. Ne serait-il pas possible de passer par une commande plus simple du genre :
on déclare les 2 valeurs, puis dans une boucle on insére la commande suivante :
sed 's/$val1/$val2/g' <file.input >file.out
Salutations.
Avec la commande nawk ça ne passe pas j'ai le message suivant :
nawk : syntax error at source line
context is '/[(]/ {t[$1]=$2; next} >>> /= <<<
nawk: bailing out at source line 1
Avec les commande sed, j'ai le message :
Cannont open pathern-file
Désolé pour le dérangement. Ne serait-il pas possible de passer par une commande plus simple du genre :
on déclare les 2 valeurs, puis dans une boucle on insére la commande suivante :
sed 's/$val1/$val2/g' <file.input >file.out
Salutations.
sur la cammande awk, j'ai le message suivant :
ksh: syntax error: '(' unexpected
Pour la commande sed c'est nettement mieux sauf que le fichier n'est pas mis à jour. J'ai aussi supprimé le $, car avec rien se se passait. Par contre je voudrais que le fichier soit sauvegardé et pas seulement affcihé.
Merci pour tout
ksh: syntax error: '(' unexpected
Pour la commande sed c'est nettement mieux sauf que le fichier n'est pas mis à jour. J'ai aussi supprimé le $, car avec rien se se passait. Par contre je voudrais que le fichier soit sauvegardé et pas seulement affcihé.
Merci pour tout
Pour la commande sed c'est nettement mieux sauf que le fichier n'est pas mis à jour complétement.Pas complètement n'est pas une réponse pouvant nous mettre sur la voie ;-(
Peux-tu développer s'il te plaît ?
J'ai supprimé le $, car avec rien se se passaitT'es sûr ? ;-\
Le caractère $ représente la fin de ligne et rien d'autre.
Par contre je voudrais que le fichier soit sauvegardé et pas seulement affcihé.Suffit de faire une redirection
sed -f cmd.sed fichier > fich.final
De plus je ne dois surtout pas trier les données
Désolé de ne pas avoir été suffisamment précis dans mon exemple. J'aurai dû te joindre les fichiers mais comme je ne les avais pas avec moi.
Ceci dit la commande join pourra me servir pour une autre application.
Salutations.
Cette-fois-ci je joins un extrait des fichiers. Après vérification, je me suis trompé sur la position du texte à remplacer. Le fichier a toujours ce format et la valeur a changer est toujours au même endroit (avant-denier caractère) et n'apparaît qu'une fois par ligne. Je ne trouve pas la solution, je pensais qu'avec une commande sed et éventuellement un cut ça serait possible, mais comme je suis un peu néophyte sur les boucles.
Fichier d'entrée :
K 1000. 1000.
9 2880. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='3'
9 2880. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='3'
9 2255. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='5'
9 4460. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='3'
9 3200. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='3'
9 3040. 2925.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='5'
9 3040. 2270.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='5'
9 3040. 2630.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='5'
9 3040. 2780.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='3'
9 3040. 1440.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='3'
9 3210. 1380.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='5'
9 4460. 1380.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='1'
Table :
1 (A12)
2 (A13)
3 (A15)
4 (A16)
5 (A17)
Fichier résultat :
K 1000. 1000.
9 2880. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A15)'
9 2880. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A15)'
9 2255. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A17)'
9 4460. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A15)'
9 3200. 3040.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A15)'
9 3040. 2925.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A17)'
9 3040. 2270.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A17)'
9 3040. 2630.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A17)'
9 3040. 2780.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A15)'
9 3040. 1440.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A15)'
9 3210. 1380.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A17)'
9 4460. 1380.
ATTRIBUT CHANGE NAME=MATERIAL VALUE='(A12)'
Merci pour votre aide.
awk c'est quand même puissant ;-))
Bon je mets quand même ma solution (bash + sed) ;-))