Création de liens pour lecture de fichiers seg-d.

seg-d links

Accueil

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

Programmation

Carnet des invités

Accueil > Programmation > Seg-d links

Création de liens pour lecture de fichiers seg-d.

But

Réaliser des lectures de fichiers seg-d et écritures de fichiers .DAT en plusieurs répertoires différents.

Usage

segd_links.pl fichier.xps (rev2|rev1) Fichier_de_sortie.DAT

Par exemple

segd_links.pl foo.x01 rev2 I000001fra9191.DAT

Téléchargement

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

Méthode

Les E/S de type STG, c'est-à-dire sur disque, de Geocluster doivent être réalisées dans un seul répertoire. On peut contourner cette limitation en utilisant un répertoire de travail temporaire, dans lequel on inscrit des liens symboliques pointant vers les propres sources ou destinations de son choix.

Prenons comme exemple un simple fichier foo.x01 de 4 records répartis sur 3 bandes que l'on doit habiller de géométrie en un fichier de sortie I123456fra9191.DAT. On peut ainsi voir dans les champs de bande et de record de ce fichier X;

xw84pt1% awk '/^X/' foo.x01 | cut -c1-15 | uniq
X  2444     431
X  2448     770
X  2455    8306
X  2455    8317

Typiquement, ceci signifierait qu'on doive ainsi sucessivement lire par exemple;

/nfs/data1/SEGD/tape2444/00000431.segd
/nfs/data1/SEGD/tape2448/00000770.segd
/nfs/data1/SEGD/tape2455/00008306.segd
/nfs/data1/SEGD/tape2455/00008317.segd

Comme dans l'exemple ci-haut;

xw84pt1% segd_links.pl foo.x01 rev2 I000001fra9191.DAT

Ensuite de quoi, on a les liens;

xw84pt1% ls -al /stage/links/foo/
total 56
drwxrwxr-x    2 geo1 geovect  4096 Sep 28 20:14 .
drwxrwxr-x  192 geo2 geovect 49152 Sep 28 20:12 ..
lrwxrwxrwx    1 geo1 geovect    25 Sep 28 20:14 I000001fra9191.DAT -> /stage/I000001fra9191.DAT
lrwxrwxrwx    1 geo1 geovect    38 Sep 28 20:14 P000001fra9191.DAT -> /nfs/data1/SEGD/tape2444/00000431.segd
lrwxrwxrwx    1 geo1 geovect    38 Sep 28 20:14 P000002fra9191.DAT -> /nfs/data1/SEGD/tape2448/00000770.segd
lrwxrwxrwx    1 geo1 geovect    38 Sep 28 20:14 P000003fra9191.DAT -> /nfs/data1/SEGD/tape2455/00008306.segd
lrwxrwxrwx    1 geo1 geovect    38 Sep 28 20:14 P000004fra9191.DAT -> /nfs/data1/SEGD/tape2455/00008317.segd
-rw-rw-r--    1 geo1 geovect    62 Sep 28 20:14 segin.lsi

Tous ces fichiers sont des fichiers de travail temporaires. Sachant qu'on peut les recréer en ne lançant qu'une seule commande segd_links peu couteuse, aussi bien alors les supprimer et ne conserver que le seul fichier X, lequel résume tout.

On aura remarqué le lien vers le fichier de sortie demandé

I000001fra9191.DAT -> /stage/I000001fra9191.DAT

Les liens vers les fichiers seg-d, au noms sous format Geocluster;

P000001fra9191.DAT -> /nfs/data1/SEGD/tape2444/00000431.segd
P000002fra9191.DAT -> /nfs/data1/SEGD/tape2448/00000770.segd
P000003fra9191.DAT -> /nfs/data1/SEGD/tape2455/00008306.segd
P000004fra9191.DAT -> /nfs/data1/SEGD/tape2455/00008317.segd

Ainsi que la sélection, non pas sous le format X, mais bien libri si Geocluster;

xw84pt1% cat /stage/links/foo/segin.lsi
* LIBRI SI 01                 CREW(sau3370),P1-P4,F1-F4,STG2,

On remarquera que les noms de fichiers, ici P000001fra9191.DAT à P000041fra9191.DAT ne sont que les numéros de records séquentiels dans le fichier X. Ils ne signifient rien en tant que tel mais comme ce sont des fichiers temporaires, alors leur nom n'a guère d'importance. Ceci permet une libri si d'un seule ligne.

Si le job Geocluster signale un problème sur le fichier, disons 4, alors il faut savoir que le fichier en cause est bien, selon notre table de liens, le ...etc/tape2455/00008317.segd.

le job de lecture comprendra donc les lignes;

** GVRPA@ setenv gvr_stage /stage/links/foo

et;

* RDLIB SI 01                 FILE=/stage/links/foo/segin.lsi

Remarques

  1. Eventuellement éditer, en début de mission les lignes suivantes;
    #-Eventually edit;--------------------------------------------------------------
    my $segd_root     = "/nfs/data1/SEGD/";    # SEG-D root dir
    my $crew          = "sau3370";             # CREW as in P999999sau3370.DAT
    my $pref          = "tape";                # Tape directory prefix
    my $link_rootdir  = "/stage/links/";       # Links root dir
    my $dest_dir      = "/stage/";             # Dir to hold stage OUTBD
    my $segd_name_fmt = "%08d.segd";           # Sercel SEG-D naming convention
  2. Il existe un script "lkdata" sur certains systèmes dont le but est plus ou moins le même, mais qui détermine sa source, non d'un fichier X, mais du propre listing d'un répertoire. Personnellement, je n'en recommande guère l'utilisation.

    Si le but consiste à collectionner sous un seul fichier .DAT cet ensemble de fichiers seg-d sous un répertoire, alors nous sommes réellement en train de dupliquer, sous deux formats différents, les mêmes données. Autrement dit, nous sommes littérallement en train de gaspiller la moitié de notre capacité disque. C'est fort désavantageux, d'autant plus que la sélection du fichier X doit tôt ou tard être appliquée au cours de la séquence. Aussi bien l'appliquer d'entrée de jeu.

    Si le but, par contre, est de créer un fichier .DAT temporaire afin de faire quelque travail préléminaire, d'accord, il peut y avoir avantage. Mais alors, sachant que le contenu d'un répertoire se liste par;

    xw84pt1% find /nfs/data1/SEGD/tape2455/ -name "*.segd"
    /nfs/data1/SEGD/tape2455/00008299.segd
    /nfs/data1/SEGD/tape2455/00008300.segd
    /nfs/data1/SEGD/tape2455/00008301.segd
    ...etc

    On peut supprimer de ces données ce qui n'est pas un chiffre et reformatter les deux dernières colonnes au format X;

    xw84pt1% find /nfs/data1/SEGD/tape2455/ -name "*.segd"|sort|sed 's/[^0-9]/ /g'|awk '{printf ("X%8d%7d\n", $2, $3)}'
    X    2455   8299
    X    2455   8300
    X    2455   8301
    ...etc

    On peut donc sauvegarder cette information que l'on utilise ensuite en entrée de segd_links.pl;

    xw84pt1% find /nfs/data1/SEGD/tape2455/ -name "*.segd"|sort|sed 's/[^0-9]/ /g'|awk '{printf ("X%8d%7d\n", $2, $3)}' > tmp.x01 
    xw84pt1% segd_links.pl tmp.x01 rev2 I002455fra9191.DAT ; rm tmp.x01

    Cette commande, quoique moins longue que les 149 lignes de lkdata, est relativement complexe et pourrait être mise dans un second script pour simplifier son exécution.

  3. Il existe un second script "ulkdata" destiné à supprimer les liens temporaires créés par "lkdata". A l'aide de segd_links.pl, il suffira simplement de lancer;
    xw84pt1% rm -Rf /stage/links/fichierX

    et d'enlever ainsi tous les fichiers. Si l'on désire malgré tout ne supprimer que les liens, on peut utiliser "find";

    xw84pt1% find /stage/links/fichierX -type l -exec rm {} \;
  4. Sur la mission Arabie 2008-2009, nous avons utilisé avec profit l'idée de journaliser l'ensemble des tests de la mission en un seul fichier X contenant à ce jour 5858 lignes de fichiers tests, valide pour tous les jobs "qcrec". Préfixer les lignes d'un "X" par "H" déasactive en quelque sorte les records déjà processés, à ne pas reprocesser encore;
    H2453     0920511    ; Tests  records for julian day 269 01;
    H2453     0920611
    H2453     0920711
    H2453     0920811
    H2453     0920911
    H2453     0921011
    H2453     0921111
    H2453     0921211
    X2453     1222211    ; Tests  records for julian day 270 01;
    X2453     1222311
    X2453     1222411
    X2453     1222511
    X2453     1222611
    X2453     1222711
    X2453     1222811
    X2453     1222911i...etc

A faire

Eventuellement organiser la soumission de paramètres de site sous un fichier de configuration plus simple à éditer.

Utiliser GetOpt() pour le passage d'arguments.

 

Haut de page

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