Préfixer des variables scripts shell
Résolu
Benoit A.
Messages postés
455
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
A l'aide d'un script shell, je récupère des ID allant de 1 à 192000. Je souhaiterais créer une formule (While ? peut-être), qui me préfixerait tous mes ID supérieur à 192000 par un S.
Pour info, cette ID est récupéré en colonne 1 dans un autre fichier.
Exemple:
Fichier témoin
ID;Info
191263;Toto
192000;Tutu
192001;Tata
192002;Tete
Ce qui m'est demandé en fichier de sortie:
ID;Info
191263;Toto
192000;Tutu
S192001;Tata
S192002;Tete
J'espère avoir été le plus claire possible. Merci pour votre aide.
A l'aide d'un script shell, je récupère des ID allant de 1 à 192000. Je souhaiterais créer une formule (While ? peut-être), qui me préfixerait tous mes ID supérieur à 192000 par un S.
Pour info, cette ID est récupéré en colonne 1 dans un autre fichier.
Exemple:
Fichier témoin
ID;Info
191263;Toto
192000;Tutu
192001;Tata
192002;Tete
Ce qui m'est demandé en fichier de sortie:
ID;Info
191263;Toto
192000;Tutu
S192001;Tata
S192002;Tete
J'espère avoir été le plus claire possible. Merci pour votre aide.
A voir également:
- Préfixer des variables scripts shell
- Classic shell - Télécharger - Personnalisation
- Microsoft activation scripts (mas) - Accueil - Windows
- Ssh secure shell download - Télécharger - Divers Web & Internet
- Shell startup windows 10 - Guide
- Shell infrastructure host c'est quoi - Guide
4 réponses
les " changent un peu le format, essayer
awk 'BEGIN {FS=OFS=";"} {x=$1; gsub("\"", "", x); if(x>=192000)sub("[0-9]", "S&", $1); print}' fichier
Benoit A.
Messages postés
455
Date d'inscription
Statut
Membre
Dernière intervention
515
Merci beaucoup mais cette solution ne marche pas :(
hello
$ awk 'BEGIN {FS=OFS=";"} $1>=192000 && $1 ~/^[0-9]*$/ {$1="S" $1} {print}' fichier
ID;Info
191263;Toto
S192000;Tutu
S192001;Tata
S192002;Tete
salut,
un boucle while, toujours, pour lire un fichier !
un boucle while, toujours, pour lire un fichier !
while read -r lineensuite pour séparer les valeurs contenues sur une ligne, il faut modifier l'IFS (Internal Field Separator) pour l'environnement de la commande
do echo "$line"
done < fichier
read, et
tester la valeur du premier champ:
while IFS=';' read -r champ_1 reste_de_la_ligne
do test $champ_1 -gt 192000 && s=S || s=""
echo "$s$champ_1;$reste_de_la_ligne"
done < fichier
Heu là ça devient compliqué pour moi ... Je n'ai jamais fais de shell.
Voici ce que j'ai moi dans le fichier actuel en .sh
cp -p test.prn test.full.prn
cp -p test2.prn test2.full.prn
# Suppression des duplicats
cat test.full.prn | sort -u | sort -t\; -k1,1 -k2.8,2.11 -k2.5,2.6 -k2.2,2.3 > test.prn
cat test2.full.prn | sort -u | sort -t\; -k1,1 -k2.8,2.11 -k2.5,2.6 -k2.2,2.3 > test2.prn
exit 0
Sachant que dans test.prn et test2.prn j'ai des lignes comme ça :
"100000";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
Et donc moi ce que je souhaiterais en recréant les fichiers test.prn et test2.prn qu'à partir de la ligne 192000 que ça donne ça :
"S192001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
Est-ce que vous voyez ce que je veux dire ?
En tout cas merci pour votre aide :)
Voici ce que j'ai moi dans le fichier actuel en .sh
cp -p test.prn test.full.prn
cp -p test2.prn test2.full.prn
# Suppression des duplicats
cat test.full.prn | sort -u | sort -t\; -k1,1 -k2.8,2.11 -k2.5,2.6 -k2.2,2.3 > test.prn
cat test2.full.prn | sort -u | sort -t\; -k1,1 -k2.8,2.11 -k2.5,2.6 -k2.2,2.3 > test2.prn
exit 0
Sachant que dans test.prn et test2.prn j'ai des lignes comme ça :
"100000";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
Et donc moi ce que je souhaiterais en recréant les fichiers test.prn et test2.prn qu'à partir de la ligne 192000 que ça donne ça :
"S192001";"01/01/1900";" ";"01/02/1900";"404250";"00";"0";"FESD";"AMF";" ";"65";"99";"P999";" ";"1";"SV";"07";" ";"45.0";"184465";"N";"999";
Est-ce que vous voyez ce que je veux dire ?
En tout cas merci pour votre aide :)
Ça pourrait marcher ça ???
Merci de ta patience
lmt=192000
cp -p test.prn test.full.prn
cp -p test2.prn test2.full.prn
# Suppression des duplicats
cat test.full.prn | sort -u | sort -t\; -k1,1 -k2.8,2.11 -k2.5,2.6 -k2.2,2.3 > test.prn
cat test2.full.prn | sort -u | sort -t\; -k1,1 -k2.8,2.11 -k2.5,2.6 -k2.2,2.3 > test2.prn
#Ajout du préfixe "S"
while IFS=';' read -r -k1 ID
do test ${ID//\"/} -gt $lmt && s=S || s=""
echo "\"$s$ID\";$ID"
done < test.prn
while IFS=';' read -r -k1 ID
do test2 ${ID//\"/} -gt $lmt && s=S || s=""
echo "\"$s$ID\";$ID"
done < test2.prn
exit 0
Merci de ta patience