Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/05/2013, à 16:36

mond14

(Résolu) tester la valeur du 4ème champs et changer sa valeur

Bonjour,
j'espère que vous allez très bien chère membre.

j'ai un document texte qui contient des lignes et des champs qui sont séparer par un ; (point_virgule).

GF3423;1425431;7652;0;20;HGR454
YTU426;1865413;7659;0;9;HGR874
GFHG23;1872578;7872;0;7;HGY754
YTU428;1945324;76999;0;0;HGI897

je veux tester si le cinquième champs égale à  0 ou 20 il me le remplace par délvré si nn il le remplace par bloqué

merci pour votre aide.

Dernière modification par mond14 (Le 21/05/2013, à 17:38)

Hors ligne

#2 Le 21/05/2013, à 16:48

Hizoka

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

Tout en bash mais un chouille long je pense tongue

cat fichier
GF3423;1425431;7652;0;20;HGR454
YTU426;1865413;7659;0;9;HGR874
GFHG23;1872578;7872;0;7;HGY754
YTU428;1945324;76999;0;0;HGI897

while read
do
apres=${REPLY##*;}
avant=${REPLY%;*;*}
num=${REPLY%;*} num=${num##*;}
if [[ ${num} == 20 || ${num} == 0 ]]
then
  echo "${avant};délvré;${apres}"
else
  echo "${avant};bloqué;${apres}"
fi
done < fichier

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 21/05/2013, à 16:56

mond14

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

Bonjour,

merci pour votre réponse

svp je veux savoir ou vous lui spécifier le cinquième champs
et si je veux la remplacer par le quatrième champs

merci

Hors ligne

#4 Le 21/05/2013, à 16:57

Hizoka

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

et avec sed

while read
do
  case $(cut -d";" -f5 <<< "${REPLY}") in
    0|20) sed "s/\([[:alnum:]]*\);\([[:alnum:]]*\);\([[:alnum:]]*\);\([[:alnum:]]*\);[[:alnum:]]*;\([[:alnum:]]*\)/\1;\2;\3;\4;délvré;\5/" <<< "${REPLY}" ;;
    *) sed "s/\([[:alnum:]]*\);\([[:alnum:]]*\);\([[:alnum:]]*\);\([[:alnum:]]*\);[[:alnum:]]*;\([[:alnum:]]*\)/\1;\2;\3;\4;bloqué;\5/" <<< "${REPLY}" ;;
  esac
done < fichier
cut -d";" -f5 <<< "${REPLY}"
ou
awk 'BEGIN{FS=OFS=";"} {print $5}'  <<< "${REPLY}"

Dernière modification par Hizoka (Le 21/05/2013, à 17:12)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 21/05/2013, à 17:01

Hizoka

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

Dans le cas de full bash, c'est pas adapté por plus de modifs :

apres=${REPLY##*;}
=> efface tout jusqu'au dernier ;
=> HGR454

avant=${REPLY%;*;*}
=> efface tout jusqu'a l'avant dernier ;
=> GF3423;1425431;7652;0

num=${REPLY%;*}
=> efface le dernier ; et ce qui le suit
=> GF3423;1425431;7652;0;20

num=${num##*;}
=> efface tout jusqu'au dernier ;
=> 20

Avec sed, pour remplacer :

sed "s/\([[:alnum:]]*\);\([[:alnum:]]*\);\([[:alnum:]]*\);\([[:alnum:]]*\);[[:alnum:]]*;\([[:alnum:]]*\)/\1;\2;\3;\4;\4;\5/" <<< "${REPLY}"

Mais je sais que certains membres vont te sortir une commande awk magique tongue

Dernière modification par Hizoka (Le 21/05/2013, à 17:03)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#6 Le 21/05/2013, à 17:13

pingouinux

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

Bonjour,
Avec awk :

awk -v n=5 'BEGIN{FS=OFS=";"}{if($n==0||$n==20)$n="délivré";else$n="bloqué";print}' fichier

Dernière modification par pingouinux (Le 21/05/2013, à 17:13)

Hors ligne

#7 Le 21/05/2013, à 17:14

mond14

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

Bonjour,

merci pour votre réponse

j'ai trouvé une réponse je ne sais si ça marche ou pas mais elle traile la premiere colone si je veux lui spécifier la 4 eme colonne qu'est ce que je doit faire .?
voila le code;

sed 's/^20/ok/; t; s/^0/livré/; t; s/^/bloqué/' 

merci

Hors ligne

#8 Le 21/05/2013, à 17:17

mond14

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

bonjour,

merciii avous je vous remercie troop!!
cette commande à bien marché!!

awk -v n=5 'BEGIN{FS=OFS=";"}{if($n==0||$n==20)$n="délivré";else$n="bloqué";print}' fichier

merci beacoup smile

Hors ligne

#9 Le 21/05/2013, à 17:30

Hizoka

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

ha je le savais smile

un petit awk qui va bien.

tu peux ajouté un resolu dans le titre de ton topic smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#10 Le 21/05/2013, à 17:36

mond14

Re : (Résolu) tester la valeur du 4ème champs et changer sa valeur

Bonjour,

oui merci beacoup ok d'accore je vai l ajouter

merci :-)

Hors ligne