SED: si condition 3eme champ alors ajout en fin de ligne
Résolu
bob737
Messages postés
157
Statut
Membre
-
jivef Messages postés 1024 Statut Membre -
jivef Messages postés 1024 Statut Membre -
Bonjour,
J'ai un fichier fic.txt avec :
champ1;champ2; TOTO; champ4;
champ1;champ2; TITI; champ4;
Je voudrais ajouter en fin de ligne OK si dans ce fichier, je trouve TOTO sur le 3ème champ.
J'essaie avec sed mais je galère.
J'ai juste trouvé le cas où la ligne "contient" la chaine TOTO (ci-dessous) mais je voudrais restreindre la condition au 3ème champ.
NODE=TOTO
STATUT=OK
sed -e "s/^\(.*${NODE}*\).*$/&${STATUT}/g" fic.txt
Merci de votre aide.
J'ai un fichier fic.txt avec :
champ1;champ2; TOTO; champ4;
champ1;champ2; TITI; champ4;
Je voudrais ajouter en fin de ligne OK si dans ce fichier, je trouve TOTO sur le 3ème champ.
J'essaie avec sed mais je galère.
J'ai juste trouvé le cas où la ligne "contient" la chaine TOTO (ci-dessous) mais je voudrais restreindre la condition au 3ème champ.
NODE=TOTO
STATUT=OK
sed -e "s/^\(.*${NODE}*\).*$/&${STATUT}/g" fic.txt
Merci de votre aide.
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
- Sed et ses caprices (ou les miens) ✓ - Forum Linux / Unix
- Sed - Remplacement texte par retour à la ligne ? ✓ - Forum Linux / Unix
- Sed supprimer ligne vide - Forum Linux / Unix
6 réponses
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;
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;
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.
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;
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;
$
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
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.
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...