SED: si condition 3eme champ alors ajout en fin de ligne
Résolu/Fermé
bob737
Messages postés
144
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
14 mars 2024
-
15 juil. 2016 à 12:08
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 - 3 mars 2017 à 01:48
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 - 3 mars 2017 à 01:48
A voir également:
- SED: si condition 3eme champ alors ajout en fin de ligne
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Sed crlf - Astuces et Solutions
- Comptage des caractères dans Word ✓ - Forum Word
- Sed supprimer ligne vide - Forum Linux / Unix
- Sed windows - Forum Linux / Unix
6 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
15 juil. 2016 à 12:19
15 juil. 2016 à 12:19
Salut,
$ cat fich
champ1;champ2; TOTO; champ4;
champ1;champ2; TITI; champ4;
$ sed 's/^[^;]*;[^;]*; TOTO;.*/& OK/' fich
champ1;champ2; TOTO; champ4; OK
champ1;champ2; TITI; champ4;
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
15 juil. 2016 à 13:35
15 juil. 2016 à 13:35
hello
$ NODE=TOTO; STATUS=OK
$ awk -F ";" -v n=$NODE -v s=$STATUS '$3 ~ n {$0=$0 s} {print}' fic.txt
champ1;champ2; TOTO; champ4;OK
champ1;champ2; TITI; champ4;
bob737
Messages postés
144
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
14 mars 2024
15 juil. 2016 à 14:26
15 juil. 2016 à 14:26
whoaa! super merci pour vos réponses rapides! ça marche.
Et maintenant si je veux encore restreinte la condition en utilisant plus 'contient' TOTO sur le 3ème champ mais =TOTO sur le 3eme champ?
Merci.
Et maintenant si je veux encore restreinte la condition en utilisant plus 'contient' TOTO sur le 3ème champ mais =TOTO sur le 3eme champ?
Merci.
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
15 juil. 2016 à 14:52
15 juil. 2016 à 14:52
avec des espaces dans le champ 3
$ cat fic.txt
champ1;champ2; TOTO11; champ4;
champ1;champ2; 22TOTO; champ4;
champ1;champ2; TOTO; champ4;
champ1;champ2; TITI; champ4;
$ awk -F ";" -v n=$NODE -v s=$STATUS '$3 ~ "^[ ]*" n "[ ]*$" {$0=$0 s} {print}' fic.txt
champ1;champ2; TOTO11; champ4;
champ1;champ2; 22TOTO; champ4;
champ1;champ2; TOTO; champ4;OK
champ1;champ2; TITI; champ4;
bob737
Messages postés
144
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
14 mars 2024
15 juil. 2016 à 15:26
15 juil. 2016 à 15:26
Merci!
bob737
Messages postés
144
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
14 mars 2024
15 juil. 2016 à 17:02
15 juil. 2016 à 17:02
oups...je n'ai pas d'espace dans le 3eme champ.
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
16 juil. 2016 à 08:11
16 juil. 2016 à 08:11
ca ne gène pas
$ cat fic.txt
champ1;champ2; TOTO11; champ4;
champ1;champ2; 22TOTO; champ4;
champ1;champ2;TOTO; champ4;
champ1;champ2; TOTO; champ4;
champ1;champ2; TITI; champ4;
$ NODE=TOTO; STATUS=OK; awk -F ";" -v n=$NODE -v s=$STATUS '$3 ~ "^[ ]*" n "[ ]*$" {$0=$0 s} {print}' fic.txt
champ1;champ2; TOTO11; champ4;
champ1;champ2; 22TOTO; champ4;
champ1;champ2;TOTO; champ4;OK
champ1;champ2; TOTO; champ4;OK
champ1;champ2; TITI; champ4;
$
bob737
Messages postés
144
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
14 mars 2024
20 juil. 2016 à 18:45
20 juil. 2016 à 18:45
J'ajoute une difficulté:
Peut-on chaîner deux awk comme avec un pipe soit
j'ajoute à la condition précédente l'action de remplacer le TOTO par STATUS sur le 3eme champ
J'ai réussi avec deux commandes awk mais je me demande j'image qu'il serait plus performant de le faire en une commande.
Merci.
Peut-on chaîner deux awk comme avec un pipe soit
j'ajoute à la condition précédente l'action de remplacer le TOTO par STATUS sur le 3eme champ
J'ai réussi avec deux commandes awk mais je me demande j'image qu'il serait plus performant de le faire en une commande.
Merci.
dubcek
Messages postés
18757
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
19 décembre 2024
5 623
21 juil. 2016 à 07:57
21 juil. 2016 à 07:57
on peuit mettre le code dans un fichier si la ligne devient trop longue
$ NODE=TOTO; STATUS=OK; awk -F ";" -v OFS=";" -v n=$NODE -v s=$STATUS '$3 ~ "^[ ]*" n "[ ]*$" {$0=$0 s; sub("TOTO", "STATUS", $3)} {print}' fic.txt
champ1;champ2; TOTO11; champ4;
champ1;champ2; 22TOTO; champ4;
champ1;champ2;STATUS; champ4;OK
champ1;champ2; STATUS; champ4;OK
champ1;champ2; TITI; champ4;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bob737
Messages postés
144
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
14 mars 2024
Modifié par bob737 le 14/02/2017 à 14:58
Modifié par bob737 le 14/02/2017 à 14:58
Bonjour,
Je reviens sur le sujet car j'aimerais ajouter le condition de mettre le STATUS en fin de ligne soit sur le champ 5 dans notre exemple si et seulement si ce champ 5 est vide.
Merci.
Je reviens sur le sujet car j'aimerais ajouter le condition de mettre le STATUS en fin de ligne soit sur le champ 5 dans notre exemple si et seulement si ce champ 5 est vide.
Merci.
bob737
Messages postés
144
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
14 mars 2024
14 févr. 2017 à 15:51
14 févr. 2017 à 15:51
ok j'ai trouvé.
$3 == n && $5 ==""
$3 == n && $5 ==""
jivef
Messages postés
927
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
12 novembre 2020
306
17 févr. 2017 à 22:19
17 févr. 2017 à 22:19
Bonjour,
As-tu essayé avec awk ?
echo "champ1;champs2;TOTO;champs4" | awk -F ";" '{ print $3}'
TOTO
Il te suffit de mettre le résultat de la commande dans une variable
var=$(echo "champ1;champs2;TOTO;champs4" | awk -F ";" '{ print $3}')
Et de vérifier le contenu de la variable.
Je ne sais pas si ça répond bien à ta question...
As-tu essayé avec awk ?
echo "champ1;champs2;TOTO;champs4" | awk -F ";" '{ print $3}'
TOTO
Il te suffit de mettre le résultat de la commande dans une variable
var=$(echo "champ1;champs2;TOTO;champs4" | awk -F ";" '{ print $3}')
Et de vérifier le contenu de la variable.
Je ne sais pas si ça répond bien à ta question...
jivef
Messages postés
927
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
12 novembre 2020
306
3 mars 2017 à 01:48
3 mars 2017 à 01:48
Bonjour,
J'accepte qu'on "moinsse" une de mes réponses, mais dans ce cas il faut expliquer pourquoi car c'est ce qui me permet de progresser.
Surtout que la solution proposée fonctionne !
Jivef :Certifié LPIC-1 (pour information).
J'accepte qu'on "moinsse" une de mes réponses, mais dans ce cas il faut expliquer pourquoi car c'est ce qui me permet de progresser.
Surtout que la solution proposée fonctionne !
Jivef :Certifié LPIC-1 (pour information).