XSM FAQ
- Pourquoi le programme XSM s'appelle-t-il hxsm ?
- Problèmes communs d'activation de clé
- Activation de clé sous LPAR AIX, POWER6 Live Partition Mobility
- Comment connaitre la date d'expiration d'un programme XSM activé ?
- Dans un script, comment passer les noms de fichiers sous forme de variables ?
- Dans un script, comment passer les paramètres de tri sous forme de variables ?
- Peut-on combiner des options en ligne de commande et un fichier paramètre ?
- Peut-on combiner FILE=n et noms de fichier statiques dans un fichier paramètre ?
- Combien de fichiers maximum peut-on traiter avec FILE=n, SORTOFn ?
- Quand doit-on utiliser l'option KEEP_ORDER ?
- Dans un parmfile, les lignes d'instructions FIELDS, INCLUDE, EXCLUDE sont longues, peut-on les écrire sur plusieurs lignes ?
- Lorsque le fichier en entrée est vide, XSM fait une erreur XSM083E. Comment contourner ?
- Peut-on définir la ligne supprimée dans le cas d'un dédoublonage de fichier, par exemple prendre toujours la deuxième ?
- A quoi sert et comment fonctionne l'option Y2K ?
- Le séparateur de champs virgule '
FIELDSEP=,
' provoque une confusion ; comment contourner ? - Comment supprimer les informations écrites sur stderr ?
- Comment utiliser le multi-threading (XSM version 6) ?
- Peut-on utiliser XSM en réseau ?
- Comment désintaller XSM ?
REPONSES :
- Pourquoi le programme XSM s'appelle-t-il hxsm ?
Pour ne pas induire de confusion avec le programme X11 Session Manager "
xsm
" d'UNIX
- Problèmes communs d'activation de clé
XSM s'active avec une clé d'activation délivrée sur l'extranet XSM à partir d'un Serial Number. Lorsque vous téléchargez/copiez XSM sur une nouvelle machine, XSM affiche son Serial Number en passant les commandes :
./hhnsinst[VER] ./hxsm[VER]
( VER=version exemple: hhnsinst656 hxsm656)./hxsm[VER]
Exemple :[root@srv1 tmp]# ./hhnsinst656 hxsm656 Program 'hxsm656' successfully installed [root@srv1 tmp]# ./hxsm656 Thanks for testing the 'HHNS Sort/Merge Program MultiPRO - V.6' Program If you wish to register for the 'HHNS Sort/Merge Program MultiPRO - V.6' Product on THIS machine, just contact HHNS with the following registration (serial number) key : 0013-3432-1505-M For further informations : http://www.hhns.fr, email:support@hhns.fr Please press Enter to continue...
Il faut alors générer sur l'Extranet une clé d'activation pour cette plateforme (une plateforme = hostname + Operating System + Serial Number). Puis activer XSM avec la clé d'activation obtenue, en passant la commande :./hhnsinst[VER] ./hxsm[VER] cle_d_activation
( VER=version exemple: hhnsinst656 hxsm656) Exemple :[root@srv1 tmp]# ./hhnsinst656 hxsm656 1234-5678-9012-A Program 'hxsm656' successfully installed
XSM est alors opérationnel. Lorsque vous le lancez sans aucun paramètre, il affiche son mode d'emploi. Problèmes fréquents :- Lorsque vous passez la commande
hhnsinst
, vous n'indiquez pas le bon pathname du programme XSM ; par exemple, vous n'êtes pas positionné sur le répertoire contenant XSM, ou vous avez probablement mal tapé le nom du programme - Vous avez plusieurs programmes XSM dans le PATH ; lorque vous appelez XSM, c'est une version non activée qui se lance car elle est prioritaire dans le PATH
- [UNIX] Vous n'avez pas les droits R/W sur le programme hxsm. dans ce cas, le programme
d'installation
hhnsinst
fait une erreur. - Sur certains UNIX/Linux, il faut être superuser "root" pour passer les commandes d'activation.
- L'Extranet refuse de générer une clé car le Serial Number est déjà dans sa base : Vérifiez que vous n'avez pas déjà déclaré une plateforme avec ce Serial Number. Si oui, il suffit de reconduire la clé, pour obtenir une nouvelle clé d'ativation (30 jours). Si non, contactez-nous.
- L'Extranet refuse de générer une clé d'activation car vous avez déjà généré 3 clés d'activation : Contactez-nous.
- Lorsque vous passez la commande
- Activation de clé sous LPAR AIX, POWER6 Live Partition Mobility
Up to version 6.79, XSM Serial Number is based on software and hardware details. Thus when an XSM binary is activated on a LPAR system, it is NOT possible to move LPAR to another hardware p/System without re-activating XSM (it will display a new Serial Number). From version 6.80, XSM Serial Number is no longer based on hardware. Once activated on a LPAR system, XSM will continue running when LPAR is moved to another hardware.
- Comment connaitre la date d'expiration d'un programme XSM activé ?
$ hhnsinstVVV -q [pathname/]hxsmVVV (VVV = la version) Exemple: $ hhnsinst680 -q /usr/local/bin/hxsm680 0024-1095-6502-U D=18092012 ! ! ! +- expiration : 18 septembre 2012 +-Serial Number Attention: - ne pas mélanger un hhnsinst 64-bits avec un XSM 32-bits XSM, et vice-versa. - indiquer le pathname correct de XSM si le binaire n'est pas sur le répertoire courant.
- Dans un script, comment passer les noms de fichiers sous forme de variables ?
a) Avec un parmfile (fichier contenant les paramètres), utiliser les variables d'environnement SORTIN et SORTOUT associées au ordres INPFIL et OUTFIL : myparm.xsm contient :
SORT FIELDS=(14,7,B,A) RECORD RECFM=V,LRECL=200 INPFIL DD:SORTIN OUTFIL DD:SORTOUT
Le script affecte les valeurs de SORTIN et SORTOUT avant l'appel à XSM :export SORTIN=/a/b/c/myinputfile export SORTOUT=/d/e/f/myoutputfile # Windows: set SORTIN=/a/b/c/myinputfile # Windows: set SORTOUT=/d/e/f/myoutputfile hxsm myparm.xsm
b) En mode commande,A=/a/b/c/myinputfile B=/d/e/f/myoutputfile # Windows: set A=/a/b/c/myinputfile # Windows: set B=/d/e/f/myoutputfile
# Ancienne forme :hxsm -rF -l180 -k14,10,A,C -o$B $A # Windows: hxsm -rF -l180 -k14,10,A,C -o%B% %A%
# Nouvelle forme :hxsm --recfm=F --lrecl=180 --key=14,10,A,C --infile=$A --outfile=$B # Windows: hxsm --recfm=F --lrecl=180 --key=14,10,A,C --infile=%A% --outfile=%B%
# On peut aussi utiliser les redirections UNIX stdin et stdout :hxsm --recfm=F --lrecl=180 --key=14,10,A,C < $A > $B # Windows: hxsm --recfm=F --lrecl=180 --key=14,10,A,C < %A% > %B%
Nota Bene : XSM est plus performant si l'on spécifie le fichier en entrée car il peut déterminer dynamiquement la valeur optimale STORAGE. Si l'on utilise le standard input, XSM ne peut pas déterminer la taille du fichier en entrée et le STORAGE optimal. Dans un parmfile, on ne peut utiliserDD:SORTIN
que s'il n'y a qu'un seul fichier en entrée. Autrement, il faut indiquer les noms de fichiers sous forme statique :SORT FIELDS=(14,7,B,A) RECORD RECFM=V,LRECL=200 INPFIL /a/b/c/myinputfile1 INPFIL /a/b/c/myinputfile2 INPFIL /a/b/c/myinputfile3
- Dans un script, comment passer les paramètres de tri sous forme de variables ?
a) en mode commande, on suppose que le script a au préalable calculé les variables nécessaires
RECFM=... LRECL=... KEYS=... hxsm --recfm=$RECFM --lrecl=$LRECL --key=$KEYS --infile=$A --outfile=$B
b) en construisant dynamiquement un fichier temporaire parmfile avant de lancer XSM # Creation du parmfile temporaireecho " **** parmfile temporaire /tmp/myparm.$$ **** SORT FIELDS=($start1,$len1,C,A,$start2,$len2,C,A) RECORD RECFM=$recfm,LRECL=$lrecl INPFIL $A OUTFIL $B " > /tmp/myparm.$$
# appel XSMhxsm /tmp/myparm.$$
# suppression du temporaire si RC=0if [ $? -eq 0 ] ; then rm /tmp/myparm.$$ ; fi
Nota : la méthode b) est recommandée pour faciliter la mise au point et la maintenance. - Peut-on combiner des options en ligne de commande et un fichier paramètre ?
Les options suivantes peuvent être ajoutées dans la commande :
-q, --quiet
: quiet-v, --verbose
: verbose-c, --check
: don't sort, just checks that a previous result is correctly sorted Les autres options qui définissent les noms de fichiers en entrée, en sortie, les clés de tri, les options de tri, les fichiers temporaires peuvent être passés en mode commande à condition que ces options ne figurent pas dans le parmfile. Nota bene : le parmfile doit être le dernier paramètre de la commande. Exemples : Le parmfile ne contient que les clés de tri et le format des fichiers en entrée et en sortie ; les noms de fichers sont indiqués dans la commande : parmfile :SORT FIELDS=(10,8,,C,A) RECORD RECFM=F,LRECL=100
ligne de commande :hxsm -v myparm.xsm < /a/b/c/myinputfile > /d/e/f/myoutputfile
Le parmfile contient les clés de tri, le format des fichiers, et le nom du fichier en entrée ; le nom du fichier en sortie est indiqué dans la commande : parmfile :SORT FIELDS=(10,8,,C,A) RECORD RECFM=F,LRECL=100 INPFIL /a/b/c/myinputfile
ligne de commande :hxsm -v -o /d/e/f/myoutputfile myparm.xsm
Cet exemple de peut pas fonctionner : le fichier en sortie est spécifié à la fois en mode commande et dans le parmfile ! parmfile :SORT FIELDS=(10,8,,C,A) RECORD RECFM=F,LRECL=100 INPFIL /a/b/c/myinputfile OUTFIL /d/e/f/myoutputfile
ligne de commande :hxsm -v -o /d/e/f/myoutputfile myparm.xsm
- Peut-on combiner FILE=n et noms de fichier statiques dans un fichier paramètre ?
Non : dans un même parmfile, le ou les fichiers en sortie sont spécifiés par des ordres
OUTFIL nom_de_fichier
ouOUTFIL FILE=n
mais on ne peut pas combiner ces deux formes dans un même parmfile. La formeOUTFIL FILE=n
sert à indiquer des noms de fichiers qui ont été affectés par des variables d'environnementSORTOFn
. Exemple : parmfile :SORT FIELDS=(3,3,CH,A,51,11,CH,A) RECORD RECFM=F,LRECL=402 INPFIL /tmp/worldclients.inp OUTFIL /tmp/clients.fr,INCLUDE=(19,3,CH,EQ,C'.fr') OUTFIL /tmp/clients.uk,INCLUDE=(19,3,CH,EQ,C'.uk') OUTFIL /tmp/clients.de,INCLUDE=(19,3,CH,EQ,C'.de')
ligne de commande :hxsm -v myparm.xsm
équivalent à parmfile :SORT FIELDS=(3,3,CH,A,51,11,CH,A) RECORD RECFM=F,LRECL=402 INPFIL /tmp/worldclients.inp OUTFIL FILE=1,INCLUDE=(19,3,CH,EQ,C'.fr')
# affeter la variable SORTOF1OUTFIL FILE=2,INCLUDE=(19,3,CH,EQ,C'.uk')
# affeter la variable SORTOF2OUTFIL FILE=3,INCLUDE=(19,3,CH,EQ,C'.de')
# affeter la variable SORTOF3 ligne de commande :SORTOF1=/tmp/clients.fr SORTOF2=/tmp/clients.uk SORTOF3=/tmp/clients.de hxsm -v myparm.xsm
- Combien de fichiers maximum peut-on traiter avec FILE=n, SORTOFn ?
99 fichiers. Nota #1 : la première variable SORTOFn est toujours SORTOF1 Nota #2 : l'ordre des variables doit être consécutif : Correct : SORTOF1=/tmp/clients.fr SORTOF2=/tmp/clients.uk SORTOF3=/tmp/clients.de hxsm -v myparm.xsm Incorrect : SORTOF1=/tmp/clients.fr SORTOF2=/tmp/clients.uk SORTOF4=/tmp/clients.de hxsm -v myparm.xsm Nota #3 : Si cela n'est pas suffisant, signalez-le nous et nous augmenterons la valeur.
- Quand doit-on utiliser l'option KEEP_ORDER ?
cf. tris desctuctifs et non-destructifs
- Dans un parmfile, les lignes d'instructions FIELDS, INCLUDE, EXCLUDE sont longues, peut-on les écrire sur plusieurs lignes ?
Oui : on peut écrire une instruction sur plusieurs lignes à condition de terminer par une virgule. Exemple :
SORT FIELDS=(011,003,CH,A, 001,010,CH,A, 015,114,CH,A, 014,001,CH,A) RECORD RECFM=V,LRECL=263 EXCLUDE COND=(030,002,CH,EQ,C'L1',AND, 032,001,CH,EQ,C'1', OR, 030,002,CH,EQ,C'L2',AND, 032,001,CH,EQ,C'2') INPFIL DD:SORTIN OUTFIL DD:SORTOUT
Nota : dans l'expressionCOND=
, l'opérateur booléen 'AND' est proritaire sur l'opérateur 'OR'. Vous pouvez rajouter des parenthèses pour une meilleure lisibilité :EXCLUDE COND=((030,002,CH,EQ,C'L1',AND, 032,001,CH,EQ,C'1'), OR, (030,002,CH,EQ,C'L2',AND, 032,001,CH,EQ,C'2'))
- Lorsque le fichier en entrée est vide, XSM fait une erreur XSM083E. Comment contourner ?
Que les données en entrées proviennent de stdin (standard input) ou d'un fichier nommé, XSM attend des données à traiter. S'il peut arriver dans un traitement régulier que le fichier en entrée soit vide, alors il convient de tester ce fichier avant de lancer XSM. Cela est trivial en Shell UNIX :
# # ... some step of a batch process .. # INPUT=/a/b/c/myinputfile OUTPUT=/d/e/f/myoutputfile # input file is size 0 or does not exists: if [ -s $INPUT ] ; then echo "input file is empty ; nothing to do !" # if you need the output files anyway, then pretend they exist: > $OUTPUT # file is okay for processing: else hxsm --recfm=F --lrecl=180 --key=14,10,A,C --infile=$INPUT --outfile=$OUTPUT fi if [ $? -ne 0 ] ; then echo "error in SORT step" fi
Pour le batch command processor Windows "cmd.exe", cela necessite quelques outils "UNIX-like" ; Dans notre cas 'test.exe', une implemantation Windows de l'utilitaire UNIX 'test'. Nota: Perl est une bonne solution pour les scripts Windows (et facilement portable UNIX/Windows).Rem Rem ... some step of a batch process .. Rem set INPUT=C:\a\b\c\myinputfile set OUTPUT=C:\d\e\f\myoutputfile Rem input file is size 0 or does not exists: test -s %INPUT% if %ERRORLEVEL% 0 goto OK goto KO :KO echo input file is empty ; nothing to do ! Rem if you need the output files anyway, then pretend they exist: ver 1>nul 2>OUTPUT goto NEXT :OK Rem file is okay for processing: hxsm --recfm=F --lrecl=180 --key=14,10,A,C --infile=%INPUT% --outfile=%OUTPUT% goto NEXT
- Peut-on définir la ligne supprimée dans le cas d'un dédoublonage de fichier, par exemple prendre toujours la deuxième ?
Non, cela est impossible.
- A quoi sert et comment fonctionne l'option Y2K ?
Le type Y ou Y2K indique qu'une clé de tri de type date contient des dates à la fois antérieures et postérieures à l'an 2000. XSM utilise alors l'année 70 (1970) comme année pivot pour déterminer si les dates sont du XXe ou du XXIe siècle. Exemple : 120186 : 86 > pivot -> 12/01/1986 120271 : 71 > pivot -> 12/02/1986 120370 : 70 ≤ pivot -> 12/03/2070 120468 : 68 < pivot -> 12/04/2086 120507 : 68 < pivot -> 12/05/2007 120601 : 68 < pivot -> 12/06/2001 L'option Y2KSTART permet de choisir un autre pivot que 1970. Exemple:
OPTION Y2KSTART=1930 SORT FIELDS=(11,2,Y2C,D,9,2,CH,D,7,2,CH,D,1,6,CH,A) RECORD RECFM=V,LRECL=80 INPFIL clients.inp OUTFIL clients.out
- Le séparateur de champs virgule '
FIELDSEP=,
' provoque une confusion ; comment contourner ?En effet, dans l'exemple suivant, XSM interprète la virgule comme un séparateur d'instruction et considère que le séparateur de champs est vide
FIELDSEP=
SORT VFIELDS=(4,5,N,A,1,20,C,D),FIELDSEP=, RECORD RECFM=V,LRECL=100 INPFIL clients.csv OUTFIL clients.out
Indiquer alors les mots-clés suivants : BAR = the '|' char TAB = the Tabulation (X'09') char COMMA = the ',' char COLUMN = the ':' char DIARESIS = the '#' char SLASH = the '/' char BACKSLASH = the '\' char SEMICOLUMN ou SEMI-COLUMN = the ';' char SINGLEQUOTE ou SINGLE-QUOTE = the "'" char DOUBLEQUOTE ou DOUBLE-QUOTE = the '"' char ou indiquer la valeur hexadécimale : X'hh' Exemples :SORT VFIELDS=(4,5,N,A,1,20,C,D),FIELDSEP=COMMA SORT VFIELDS=(4,5,N,A,1,20,C,D),FIELDSEP=X'2C'
Si FIELDSEP n'est pas indiqué dans un ordreSORT VFIELDS
, sa valeur par défaut est la tabulation (X'09').- Comment supprimer les informations écrites sur stderr ?
En utilisant l'option
-q
ou--quiet
. L'intérêt du mode "Quiet" par rapport à la redirection2>/dev/null
est que dans le premier cas seuls les messages d'erreurs réels apparaitrons ; dans le second cas, tous les messages d'erreur seront supprimés. Utilisateurs Windows : la redirection s'écrit2>NUL
Mode "Verbose" :~/dev/ $ hxsm658 -v littlef.xsm XSM056I HXSM V6.58 - (c) HHNS 1996-2006 XSM027I Initializing XSM028I Reading XSM073I 000000080 RECORDS PROCESSED, 000000080 so far. : 0 SEC. XSM031I END OF JOB littlef.xsm 80 rec.: 1 SEC. ~/dev/ $
Mode normal :~/dev/ $ hxsm658 littlef.xsm XSM031I END OF JOB littlef.xsm 80 rec.: 0 SEC. ~/dev/ $
Mode "Quiet" :~/dev/ $ hxsm658 -q littlef.xsm ~/dev/ $
- Comment utiliser le multi-threading (XSM version 6) ?
Par défaut, XSM fonctionne en mono-thread et n'utilise qu'un seul processeur à un instant donné. Si l'on déclare plusieurs sortworks (sous-entendu sur plusieurs disques différents), XSM fonctionnera en multi-threading et délivrera les meilleurs performances. C'est le système d'exploitation qui associe alors dynamiquement les threads aux processeurs disponibles ("processor bind"). Pour forcer le multi-threading, utiliser soit
OPTIONS PROCS=n
soit déclarer plusieurs sortworks (même si vous n'en avez pas plusieurs) :SORTWORKS dir1,dir2[,dir3 ...]
Supposons par exemple que vous ayez une machine quadri-processeur, le plus interessant est de trouver 4 disques physiques différents pour les sortworks. Les I/O disques sont plus longues que les traitements CPU, il n'est donc pas interessant d'exécuter XSM en multi-threading sur un même sortwork (ou sur des sortworks du même dique physique) : en effet, les threads seront bloqués par des contentions I/O disque et le résultat sera équivalent à un traitement mono-threading.- Peut-on utiliser XSM en réseau ?
Non : XSM ne fonctionne que sur le système sur lequel il a été activé. Un partage de disque contenant le programme XSM vers une autre machine du réseau ne permet pas à cette autre machine d'utiliser XSM. D'autre part, il est déconseillé pour des raisons de performances de trier depuis une machine des fichiers sur des disques partagés d'une autre machine. Dans certains cas, il peut être plus performant de compresser / copier / décompresser ces fichiers. Cela dépend : - des performances du réseau - des performances des disques - des performances du processeur.
- Comment désinstaller XSM ?
Pour toute question, contactez-nous.supprimez les 2 fichiers: UNIX:
rm hxsm[numero_de_version] hhnsinst[numero_de_version]
Windows:del hxsm[numero_de_version] hhnsinst[numero_de_version]
Et voila! - Lorsque le fichier en entrée est vide, XSM fait une erreur XSM083E. Comment contourner ?