Préfixer des variables scripts shell
Résolu/Fermé
Benoit A.
Messages postés
454
Date d'inscription
mercredi 8 février 2012
Statut
Membre
Dernière intervention
13 août 2015
-
Modifié par zipe31 le 17/04/2014 à 13:18
Utilisateur anonyme - 17 avril 2014 à 18:52
Utilisateur anonyme - 17 avril 2014 à 18:52
A voir également:
- Préfixer des variables scripts shell
- Classic shell windows 11 - Télécharger - Personnalisation
- Microsoft activation scripts - Accueil - Windows
- Shell startup windows 10 - Guide
- Efi shell version 2.31 - Forum Programmation
- Ssh secure shell download - Télécharger - Divers Web & Internet
4 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
17 avril 2014 à 13:06
17 avril 2014 à 13:06
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
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
17 avril 2014 à 12:42
17 avril 2014 à 12:42
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
Benoit A.
Messages postés
454
Date d'inscription
mercredi 8 février 2012
Statut
Membre
Dernière intervention
13 août 2015
515
17 avril 2014 à 12:43
17 avril 2014 à 12:43
Tu peux m'expliquer vite fait la commande stp ?
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
17 avril 2014 à 12:52
17 avril 2014 à 12:52
BEGIN {FS=OFS=";"} on définit ; comme séparateur de champs en entrée et en sortie
$1>=192000 && $1 ~/^[0-9]*$/ {$1="S" $1} si le champ 1 est >= à 192000 et ne contient que des chiffres, on le prefixe avec S
{print} on imprime
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
17 avril 2014 à 13:44
17 avril 2014 à 13:44
plus court
awk '{split($0, a, "\""); if(a[2]>=192000)sub("[0-9]", "S&");print}' fichier
Utilisateur anonyme
17 avril 2014 à 12:45
17 avril 2014 à 12:45
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
Benoit A.
Messages postés
454
Date d'inscription
mercredi 8 février 2012
Statut
Membre
Dernière intervention
13 août 2015
515
Modifié par Benoit A. le 17/04/2014 à 12:58
Modifié par Benoit A. le 17/04/2014 à 12:58
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 :)
Benoit A.
Messages postés
454
Date d'inscription
mercredi 8 février 2012
Statut
Membre
Dernière intervention
13 août 2015
515
17 avril 2014 à 14:15
17 avril 2014 à 14:15
Et je dois répéter ça deux fois pour les deux fichiers ?
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 < test.prn && test2.prn
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 < test.prn && test2.prn
Benoit A.
Messages postés
454
Date d'inscription
mercredi 8 février 2012
Statut
Membre
Dernière intervention
13 août 2015
515
17 avril 2014 à 14:28
17 avril 2014 à 14:28
qqchquicommenceparQ merci pour ton implication, mais vraiment je ne m'y connais absolument pas en shell. Pour moi tout ça n'est pas clair.
Benoit A.
Messages postés
454
Date d'inscription
mercredi 8 février 2012
Statut
Membre
Dernière intervention
13 août 2015
515
Modifié par Benoit A. le 17/04/2014 à 14:44
Modifié par Benoit A. le 17/04/2014 à 14:44
Ç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
17 avril 2014 à 15:35