[UNIX] Crée un décompactage
Résolu
Karamurat
Messages postés
45
Statut
Membre
-
Karamurat Messages postés 45 Statut Membre -
Karamurat Messages postés 45 Statut Membre -
Bonjour
Quel serait la commande la plus simple possible mais qui reste aussi la plus fiable de décompacter cette liste :
pour l' obtention de cette liste :
Merci D'avance {~_^}
Quel serait la commande la plus simple possible mais qui reste aussi la plus fiable de décompacter cette liste :
lawsoncompanyF: 4010-4020 lawsoncompanyF: 4050-4052
pour l' obtention de cette liste :
lawsoncompanyF: 4010 lawsoncompanyF: 4011 lawsoncompanyF: 4012 lawsoncompanyF: 4013 lawsoncompanyF: 4014 lawsoncompanyF: 4015 lawsoncompanyF: 4016 lawsoncompanyF: 4017 lawsoncompanyF: 4018 lawsoncompanyF: 4019 lawsoncompanyF: 4020 lawsoncompanyF: 4050 lawsoncompanyF: 4051 lawsoncompanyF: 4052
Merci D'avance {~_^}
A voir également:
- [UNIX] Crée un décompactage
- Cree un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Comment cree un compte gmail - Guide
- Créer un lien pour partager des photos - Guide
- Comment créé un compte paypal - Guide
9 réponses
Salut,
#! /bin/bash
while read ligne
do
NOM=${ligne% *}
VALEUR=${ligne#*: }
for i in $(seq ${VALEUR/-/ })
do
echo "$NOM $i"
done
done < fichier;-))
Bonjour,
Voilà mon fichier test :
/bnp/SREC0eiD/tmp>cat testMCA
lawsoncompanyF: 4010-4020
testXXXXF: 4050-4052
/bnp/SREC0eiD/tmp>
Voilà mon script :
/bnp/SREC0eiD/tmp>cat script.sh
#!/bin/sh
for ligne in `cat testMCA | sed 's/: /:_/g`; do
nom=`echo $ligne | sed 's/\(.*\):_.*/\1/'`
borneInf=`echo $ligne | sed "s/$nom:_\(.*\)-.*/\1/"`
borneSup=`echo $ligne | sed "s/$nom:_.*-\(.*\)/\1/"`
current=$borneInf
while [ $current -le $borneSup ]; do
echo $nom: $current
current=`expr $current + 1`
done
done
/bnp/SREC0eiD/tmp>
Et voilà ce que ca donne :
/bnp/SREC0eiD/tmp>./script.sh
lawsoncompanyF: 4010
lawsoncompanyF: 4011
lawsoncompanyF: 4012
lawsoncompanyF: 4013
lawsoncompanyF: 4014
lawsoncompanyF: 4015
lawsoncompanyF: 4016
lawsoncompanyF: 4017
lawsoncompanyF: 4018
lawsoncompanyF: 4019
lawsoncompanyF: 4020
testXXXXF: 4050
testXXXXF: 4051
testXXXXF: 4052
/bnp/SREC0eiD/tmp>
Je reste disponible pour toute explication.
Bonne journée !
Marc
Voilà mon fichier test :
/bnp/SREC0eiD/tmp>cat testMCA
lawsoncompanyF: 4010-4020
testXXXXF: 4050-4052
/bnp/SREC0eiD/tmp>
Voilà mon script :
/bnp/SREC0eiD/tmp>cat script.sh
#!/bin/sh
for ligne in `cat testMCA | sed 's/: /:_/g`; do
nom=`echo $ligne | sed 's/\(.*\):_.*/\1/'`
borneInf=`echo $ligne | sed "s/$nom:_\(.*\)-.*/\1/"`
borneSup=`echo $ligne | sed "s/$nom:_.*-\(.*\)/\1/"`
current=$borneInf
while [ $current -le $borneSup ]; do
echo $nom: $current
current=`expr $current + 1`
done
done
/bnp/SREC0eiD/tmp>
Et voilà ce que ca donne :
/bnp/SREC0eiD/tmp>./script.sh
lawsoncompanyF: 4010
lawsoncompanyF: 4011
lawsoncompanyF: 4012
lawsoncompanyF: 4013
lawsoncompanyF: 4014
lawsoncompanyF: 4015
lawsoncompanyF: 4016
lawsoncompanyF: 4017
lawsoncompanyF: 4018
lawsoncompanyF: 4019
lawsoncompanyF: 4020
testXXXXF: 4050
testXXXXF: 4051
testXXXXF: 4052
/bnp/SREC0eiD/tmp>
Je reste disponible pour toute explication.
Bonne journée !
Marc
Vraiment excellent !
après vérif , j'ai fais un autre test avec cette liste, j'ai un peu changer les choses ;) :
donc voila une nouvelle liste:
en lancent le script avec les deux méthode proposer , j'ai eu une sortie avec uniquement les compagnies avec le tiret du milieu et sans XR: devant le numero de compagnie :
c'est a dire j'ai eu exactement ça :
Au lieu de ça :
Merci encore et d'avance !
après vérif , j'ai fais un autre test avec cette liste, j'ai un peu changer les choses ;) :
donc voila une nouvelle liste:
lawsoncompanyF: 4010-4020 lawsoncompanyF: XR: 3010-3012 lawsoncompanyF: 4050-4052 lawsoncompanyF: 4069 lawsoncompanyF: AP: 4060
en lancent le script avec les deux méthode proposer , j'ai eu une sortie avec uniquement les compagnies avec le tiret du milieu et sans XR: devant le numero de compagnie :
c'est a dire j'ai eu exactement ça :
lawsoncompanyF: 4010 lawsoncompanyF: 4011 lawsoncompanyF: 4012 lawsoncompanyF: 4013 lawsoncompanyF: 4014 lawsoncompanyF: 4015 lawsoncompanyF: 4016 lawsoncompanyF: 4017 lawsoncompanyF: 4018 lawsoncompanyF: 4019 lawsoncompanyF: 4020 lawsoncompanyF: 4051 lawsoncompanyF: 4052
Au lieu de ça :
lawsoncompanyF: 4010 lawsoncompanyF: 4011 lawsoncompanyF: 4012 lawsoncompanyF: 4013 lawsoncompanyF: 4014 lawsoncompanyF: 4015 lawsoncompanyF: 4016 lawsoncompanyF: 4017 lawsoncompanyF: 4018 lawsoncompanyF: 4019 lawsoncompanyF: 4020 lawsoncompanyF: XR: 3010 lawsoncompanyF: XR: 3011 lawsoncompanyF: XR: 3012 lawsoncompanyF: 4050 lawsoncompanyF: 4051 lawsoncompanyF: 4052 lawsoncompanyF: 4069 lawsoncompanyF: AP: 4060
Merci encore et d'avance !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Change pour la ligne en gras/italique (en fait il n'y a qu'un dièse (#) à rajouter) et rajoute celles en gras :
#! /bin/bash
# set -xv
while read ligne
do
NOM=${ligne% *}
VALEUR=${ligne##*: }
echo ${VALEUR} | grep "-" >/dev/null
if [ "$?" != 0 ]
then
echo $NOM ${VALEUR}
continue
fi
for i in $(seq ${VALEUR/-/ })
do echo "$NOM $i"
done
done < ;-))
Salut,
pour m'amuser un peu :-) je ne suis pas entrer dans les détails :-))
lami20j
pour m'amuser un peu :-) je ne suis pas entrer dans les détails :-))
root@debian:~# cat ccm.pl
#!/usr/bin/perl
while (<>){
($v) = $_ =~ /^(.*?:)\s/ if 1 .. 1;
/^$v\s+(\d+)-(\d+)/;
@h{$1 .. $2}=$v;
}
print map { "$v $_\n" } sort keys %h;
root@debian:~# cat aaa
lawsoncompanyF: 4010-4020
lawsoncompanyF: 4050-4052
root@debian:~# perl ccm.pl aaa
lawsoncompanyF: 4010
lawsoncompanyF: 4011
lawsoncompanyF: 4012
lawsoncompanyF: 4013
lawsoncompanyF: 4014
lawsoncompanyF: 4015
lawsoncompanyF: 4016
lawsoncompanyF: 4017
lawsoncompanyF: 4018
lawsoncompanyF: 4019
lawsoncompanyF: 4020
lawsoncompanyF: 4050
lawsoncompanyF: 4051
lawsoncompanyF: 4052
root@debian:~#--
lami20j
toujours pour s'amuser ;-)
:~/trash$ cat aaa
lawsoncompanyF: 4010-4020
lawsoncompanyF: 4050-4052
:~/trash$ perl -ne '/(.*?:)\s*(\d+)-(\d+)/;for $e($2 .. $3){ print "$1 $e\n" }' aaa
lawsoncompanyF: 4010
lawsoncompanyF: 4011
lawsoncompanyF: 4012
lawsoncompanyF: 4013
lawsoncompanyF: 4014
lawsoncompanyF: 4015
lawsoncompanyF: 4016
lawsoncompanyF: 4017
lawsoncompanyF: 4018
lawsoncompanyF: 4019
lawsoncompanyF: 4020
lawsoncompanyF: 4050
lawsoncompanyF: 4051
lawsoncompanyF: 4052
:~/trash$
alors la je suis vraiment K.O technique ! je ne savais pas que la commande "perl" était aussi puissant que ça ,
seulement peut on inclure les valeurs avec les compagnies sans le tiret (-) ainsi que le (AP:) sachant que sa pourrait être autre que AP: mais XR: ou FR: etc ...
c'est a dire ceci :
la fonction proposer avec "perl" et "awk" me semble la meilleure solution ,
Pourrait on inclure une commande a cette fonction perl ou awk qui permettrai de récupérer les compagnie seul c'est a dire comme celle cité en haut ,
car avec la méthode "perl" , tout fct a merveille sauf qu'il manque les compagnie seul et que il'ya un " 5 0 " qui apparait a la fin,
Voila Merci encore ;)
seulement peut on inclure les valeurs avec les compagnies sans le tiret (-) ainsi que le (AP:) sachant que sa pourrait être autre que AP: mais XR: ou FR: etc ...
c'est a dire ceci :
lawsoncompanyF: 4069 lawsoncompanyF: AP: 4060
la fonction proposer avec "perl" et "awk" me semble la meilleure solution ,
Pourrait on inclure une commande a cette fonction perl ou awk qui permettrai de récupérer les compagnie seul c'est a dire comme celle cité en haut ,
car avec la méthode "perl" , tout fct a merveille sauf qu'il manque les compagnie seul et que il'ya un " 5 0 " qui apparait a la fin,
dev4:
dev4: cat script_decompactage_3.sh
perl -ne '/(.*?:)\s*(\d+)-(\d+)/;for $e($2 .. $3){ print "$1 $e\n" }' testMCA
dev4:
dev4:
dev4: ./script_decompactage_3.sh lawsoncompanyF: 4010 lawsoncompanyF: 4011 lawsoncompanyF: 4012 lawsoncompanyF: 4013 lawsoncompanyF: 4014 lawsoncompanyF: 4015 lawsoncompanyF: 4016 lawsoncompanyF: 4017 lawsoncompanyF: 4018 lawsoncompanyF: 4019 lawsoncompanyF: 4020 lawsoncompanyF: XR: 3010 lawsoncompanyF: XR: 3011 lawsoncompanyF: XR: 3012 lawsoncompanyF: XR: 3013 lawsoncompanyF: XR: 3014 lawsoncompanyF: XR: 3015 lawsoncompanyF: XR: 3016 lawsoncompanyF: XR: 3017 lawsoncompanyF: XR: 3018 lawsoncompanyF: XR: 3019 lawsoncompanyF: XR: 3020 testXXXXF: 4050 testXXXXF: 4051 testXXXXF: 4052 5 0 dev4:
Voila Merci encore ;)