Jonction ligne par ligne d'enregistrements S et X du SPS

Paste S and X

Accueil

Journal de mission
Course à pied
Ski de randonnée
Alpinisme
Voile
Ecrits
Diaporamas

Programmation

Carnet des invités

Accueil > Programmation > Paste S and X

Jonction ligne par ligne d'enregistrements S et X du SPS

But

Joindre les fichiers S et X en une seule entité facile à manipuler.

Téléchargement

pastesx.pl : Clic droit, "save as", sauvegarder ainsi la cible du lien en tant que pastesx.pl, rendre exécutable et placer dans le $path, typiquement sous /usr/local/bin, sur une machine de type xw84pt1. Licence: GPL.

Méthode

Etant donné ce fichier S de 4 sources;

xw84pt1% cat 1.s01
S   7188.00   2304.00  1A1     5.0   0    16.5 287121.5 3115850.6   0.7260074336
S   7192.00   2304.00  1A1     5.0   0    16.6 287132.8 3115899.4   0.7260074404
S   7196.00   2304.00  1A1     5.0   0    16.8 287144.1 3115948.1   0.7260074432
S   7200.00   2304.00  1A1     5.0   0    16.9 287155.3 3115996.6   0.7260074500

Et ce fichier X correspondant;

xw84pt1% cat 1.x01
X  2558      2111   7188.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2111   7188.00   2304.001  541 10802   7278.00   2240.00   2509.001
X  2558      2211   7192.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2211   7192.00   2304.001  541 10802   7278.00   2240.00   2509.001
X  2558      2311   7196.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2311   7196.00   2304.001  541 10802   7278.00   2240.00   2509.001
X  2558      2411   7200.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2411   7200.00   2304.001  541 10802   7278.00   2240.00   2509.001

On peut disposer ces 2 fichiers côte-à-côte ainsi;

xw84pt1% pastesx.pl 1.s01 1.x01 > 1.sx01

Ce fichier "sx" résultant étant constitué de lignes de 3 fois 80 caractères, il est quelque peu difficile de l'afficher ici. J'utilise ainsi pour ce faire une petite parade en imprimant les caractères 1 à 20, 71 à 90 et 161 à 180 de chaque lignes en utilisant la fonction substr() de awk;

xw84pt1% awk '{ printf ("%s .. %s .. %s\n", substr($0,1,20), substr($0,71,20), substr($0,161,20))}' 1.sx01
S   7188.00   2304.0 .. 7260074336X  2558    .. X  2558      2111
S   7192.00   2304.0 .. 7260074404X  2558    .. X  2558      2211
S   7196.00   2304.0 .. 7260074432X  2558    .. X  2558      2311
S   7200.00   2304.0 .. 7260074500X  2558    .. X  2558      2411

On aura compris qu'à la dernière colonne du S, on ne passe pas sur une nouvelle ligne, mais qu'on passe plutôt à la première ligne du X correspondant. En fait, on change de ligne seulement lors du changement de record, satisfaisant cette condition; information d'un tir sur une seule ligne.

On peut aussi utiliser la fonction "fold" afin d'enrouler chaque ligne sur 80 caractères;

xw84pt1% fold -w 80 1.sx01
S   7188.00   2304.00  1A1     5.0   0    16.5 287121.5 3115850.6   0.7260074336
X  2558      2111   7188.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2111   7188.00   2304.001  541 10802   7278.00   2240.00   2509.001
S   7192.00   2304.00  1A1     5.0   0    16.6 287132.8 3115899.4   0.7260074404
X  2558      2211   7192.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2211   7192.00   2304.001  541 10802   7278.00   2240.00   2509.001
S   7196.00   2304.00  1A1     5.0   0    16.8 287144.1 3115948.1   0.7260074432
X  2558      2311   7196.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2311   7196.00   2304.001  541 10802   7278.00   2240.00   2509.001
S   7200.00   2304.00  1A1     5.0   0    16.9 287155.3 3115996.6   0.7260074500
X  2558      2411   7200.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2411   7200.00   2304.001  541 10802   7278.00   2240.00   2509.001

Avec un éditeur ou à l'aide d'un autre script, puisqu'ils sont disposés sur une seule ligne, il est aisé de manipuler, déplacer ou supprimer les records de ce "sx" sans craindre de disjoindre un enregistrement S des X correspondants. L'édition ainsi réalisé, on peut aisément reséparer les S et les X. Par exemple;

xw84pt1% fold -w 80 1.sx01 | awk '/^S/'
S   7188.00   2304.00  1A1     5.0   0    16.5 287121.5 3115850.6   0.7260074336
S   7192.00   2304.00  1A1     5.0   0    16.6 287132.8 3115899.4   0.7260074404
S   7196.00   2304.00  1A1     5.0   0    16.8 287144.1 3115948.1   0.7260074432
S   7200.00   2304.00  1A1     5.0   0    16.9 287155.3 3115996.6   0.7260074500
xw84pt1% fold -w 80 1.sx01 | awk '/^X/'
X  2558      2111   7188.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2111   7188.00   2304.001  541 10802   7278.00   2240.00   2509.001
X  2558      2211   7192.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2211   7192.00   2304.001  541 10802   7278.00   2240.00   2509.001
X  2558      2311   7196.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2311   7196.00   2304.001  541 10802   7278.00   2240.00   2509.001
X  2558      2411   7200.00   2304.001    1  5402   7262.00   2240.00   2509.001
X  2558      2411   7200.00   2304.001  541 10802   7278.00   2240.00   2509.001

On pourra bien sûr utiliser la fonction de redirection d'unix afin de sauvegarder ces nouvelles informations en deux nouveaux S et X.

xw84pt1% 
xw84pt1% 

Téléchargement

Notes

 

Haut de page

Tous droits réservés © 2003-2006 Gaétan Martineau