Construction d'un programme shell
Résolu
Benoit A.
Messages postés
455
Date d'inscription
Statut
Membre
Dernière intervention
-
Benoit A. Messages postés 455 Date d'inscription Statut Membre Dernière intervention -
Benoit A. Messages postés 455 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je vous écris parce que je me retrouve face un petit problème que je n'arrive pas à résoudre depuis quelque jours. Je souhaiterai créé un shell qui créera un fichier avec deux conditions :
1 ère condition :
Voilà j'ai deux fichiers (mois en cours et mois-1) qui contiennent tous les deux plus de 1000 lignes et 22 colonnes qui sont sur un format CSV (séparateur ;). Dans ces deux fichiers, certaines lignes sont les mêmes. Je souhaiterais pouvoir créer un shell qui me permettrait de comparer toutes les lignes entre les deux fichiers afin de créer un troisième fichier où les résultats identiques ne seraient pas remontés sinon il reprend la ligne
Exemple :
(Fichier mois-1)
....
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
....
(Fichier mois)
....
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
....
(Fichier résultat shell)
....
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
....
2ème condition :
Dans le fichier résultat quand j'ai plusieurs lignes avec seulement la colonne 2 3 ou 4 qui change je souhaiterais récupérer le dernier résultat le plus vieux par rapport à la colonne 2. Idéalement le shell réécrirait sur le fichier résultat
Exemple (après la suppression des valeurs identiques par rapport au mois précédent):
(Fichier résultat) :
...
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"199999";"01/05/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"199999";"01/10/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
...
(Fichier après le shell)
...
"199999";"01/10/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
...
J'espère avoir été le plus clair possible avec tous ces exemples. Je remercie d'avance quiconque pourra m'aider.
Cordialement,
Je vous écris parce que je me retrouve face un petit problème que je n'arrive pas à résoudre depuis quelque jours. Je souhaiterai créé un shell qui créera un fichier avec deux conditions :
1 ère condition :
Voilà j'ai deux fichiers (mois en cours et mois-1) qui contiennent tous les deux plus de 1000 lignes et 22 colonnes qui sont sur un format CSV (séparateur ;). Dans ces deux fichiers, certaines lignes sont les mêmes. Je souhaiterais pouvoir créer un shell qui me permettrait de comparer toutes les lignes entre les deux fichiers afin de créer un troisième fichier où les résultats identiques ne seraient pas remontés sinon il reprend la ligne
Exemple :
(Fichier mois-1)
....
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
....
(Fichier mois)
....
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
....
(Fichier résultat shell)
....
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
....
2ème condition :
Dans le fichier résultat quand j'ai plusieurs lignes avec seulement la colonne 2 3 ou 4 qui change je souhaiterais récupérer le dernier résultat le plus vieux par rapport à la colonne 2. Idéalement le shell réécrirait sur le fichier résultat
Exemple (après la suppression des valeurs identiques par rapport au mois précédent):
(Fichier résultat) :
...
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"199999";"01/05/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"199999";"01/10/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
...
(Fichier après le shell)
...
"199999";"01/10/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
...
J'espère avoir été le plus clair possible avec tous ces exemples. Je remercie d'avance quiconque pourra m'aider.
Cordialement,
A voir également:
- Construction d'un programme shell
- Classic shell - Télécharger - Personnalisation
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
4 réponses
je prends les données Avant du post #21
$ awk -F ";" '{t[$1]=$0} END {for (n in t)print t[n]}' fichier
"123558";"10/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
$
hello
question: dans 1er exemple, on garde la ligne 188888.. du fichier mois, est-ce tjrs le cas, à savoir qu'à ligne différente, on garde celle de mois et pas mois-1 ?
pour le 1 ex.
question: dans 1er exemple, on garde la ligne 188888.. du fichier mois, est-ce tjrs le cas, à savoir qu'à ligne différente, on garde celle de mois et pas mois-1 ?
pour le 1 ex.
$ awk 'ARGIND==1 {t[$0]=$0; next} !t[$0]' mois-1 mois
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
Salut,
Pour ton 1er problème un simple
Par contre pour ton 2nd problème, est-ce que le nombre de caractère comprenant l'ensemble des champs 1, 2, 3 et 4 est constant ? (à savoir avec tes exemples, 39 caractères)
Pour ton 1er problème un simple
fgrep -v -f fichier_mois-1 fichier_moisdevrait te renvoyer le résultat escompté ;-)
Par contre pour ton 2nd problème, est-ce que le nombre de caractère comprenant l'ensemble des champs 1, 2, 3 et 4 est constant ? (à savoir avec tes exemples, 39 caractères)
Oui le nombre de caractère est exactement le même
Fichier mois-1
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"199851";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
Fichier mois
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
"199851";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"02/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"03/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"10/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
Résultat attendu après les deux conditions :
Suppressions des lignes identiques par rapport au mois -1 et récupération de la dernière ligne qui à une date en colonne 2 plus ancienne avec les mêmes caractéristiques..
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
"123558";"10/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"199851";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
Fichier mois
"199999";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
"199851";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"02/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"03/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
"123558";"10/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
Résultat attendu après les deux conditions :
Suppressions des lignes identiques par rapport au mois -1 et récupération de la dernière ligne qui à une date en colonne 2 plus ancienne avec les mêmes caractéristiques..
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
"123558";"10/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
Ben voilà le réusltat avec ma commande précédente (j'ai juste enlever le dernier sort, car le résultat était le même)
$ fgrep -v -f f-1 f-mois | sort -r | uniq -s 39
"188888";"01/01/1900";" ";"01/12/9999";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"00125423";"N";"300";
"123558";"10/02/1900";" ";"01/01/1900";"111111111";"00";"0";"AAAAAAAA";"CAD";" ";"55523";"9952122222";"P999";" ";"1";"SXXXX";"00";" ";"35.0";"11122510";"N";"300";
Bravo l'artiste !!