Le blog de Fatiha

Une geek de plus !

Comment utiliser une variable shell dans awk ?

 

Merci Google encore une fois ! Je cherche depuis une bonne demi-heure comment faire pour afficher une variable shell dans awk et je tombe sur un forum ubuntu qui me donne la réponse. Je suis trop contente !

Il suffit d’utiliser l’option -v et de passer en paramètre la valeur de la variable shell que l’on souhaite utiliser.

Cf. un exemple ci-dessous :

Je parse un fichier et j’affiche la ligne qui m’intéresse ainsi que la variable shell que j’aurai créée au préalable. C’est très utile quand on manipule plusieurs fichiers et qu’on veut afficher une colonne du fichier d’origine et une colonne du fichier destination et ce en une ligne.

awk -v VAR= »$myShellVariable » ‘/^MY_PATTERN/ { print $1 « ; » VAR }’ $myFile

Source : forum Ubuntu

Commande oerr sous Linux

 

Quand vous avez une erreur Oracle et que vous souhaitez avoir une explication sur la cause de cette erreur. Vous pouvez utilisez la commande oerr sous Linux. Elle vous indique aussi comment corriger votre erreur. Ci-dessous quelques exemples :

Si vous avez les erreurs :
SP2-1503: Unable to initialize Oracle call interface
SP2-0152: ORACLE may not be functioning properly

Il vous suffira de taper les commandes pour obtenir plus d’explications :

oerr SP2 1503
01503,0, « Unable to initialize Oracle call interface\n »
// *Cause:  Indicates a library used by SQL*Plus to communicate with
//          the database failed to initialize correctly.
// *Action: Check that the Oracle environment or registry entries are
//          consistent and correct.  If using the SQL*Plus Instant Client
//          make sure the SQL*Plus and Oracle libraries are from the
//          same release. Make sure you have read access to the libraries.

oerr SP2 0152
00152,0, « ORACLE may not be functioning properly\n »
// *Cause:  Unable to initialize a session to the Oracle instance.
// *Action: Make a note of the message and the number, then contact
//          the Database Administrator.

Si vous avez des erreurs de type ORA-, vous suivez le même principe :
oerr ORA 0001
00001, 00000, « unique constraint (%s.%s) violated »
// *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
//         For Trusted Oracle configured in DBMS MAC mode, you may see
//         this message if a duplicate entry exists at a different level.
// *Action: Either remove the unique restriction or do not insert the key.

Pour pouvoir accéder à cette commande, il faut vous connecter en oracle ou bien avoir toutes les variables d’environnement positionnées (ORACLE_HOME, LD_LIBRARY_PATH…).

Comment décompresser une archive à partir d’un répertoire donné avec tar ?

 

Cela vous est forcément déjà arrivé, vous avez créé une archive à partir de la mauvaise arborescence. Le problème, c’est que c’est une archive très volumineuse (plusieurs Go)et que cela va vous prendre du temps de relancer le tar.

Dans ce cas, si vous avez la bonne version de tar, vous pouvez utilisez l’option –strip-components. Comment ça fonctionne ?

Voilà ce dont je dispose :
[fatiha@monServeur:~] tar -tvzf monArchive.tar.gz
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:45:52 mnt/fatiha/REP_initial/test1/
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:45:52 mnt/fatiha/REP_initial/test1/test2/
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:45:52 mnt/fatiha/REP_initial/test1/test2/test3/
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:45:52 mnt/fatiha/REP_initial/test1/test2/test3/chemin/
drwxr-xr-x fatiha/fatiha         0 2013-09-23 12:46:07 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/
-rw-r–r– fatiha/fatiha         0 2013-09-23 12:46:02 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/file1
-rw-r–r– fatiha/fatiha         0 2013-09-23 12:46:03 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/file2
-rw-r–r– fatiha/fatiha         0 2013-09-23 12:46:05 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/file3
-rw-r–r– fatiha/fatiha         0 2013-09-23 12:46:07 mnt/fatiha/REP_initial/test1/test2/test3/chemin/listeFichiers/file4

Et ce que je souhaite obtenir :
/REP_initial/……

Dans ce cas, je me positionne au niveau du bon répertoire et je lance la commande :
tar –strip-components 2 -xvf /mnt/fatiha/monArchive.tar.gz

(astuce trouvée par mon collègue Ahmed, merci !)

Comment récupérer l’architecture d’un rpm sous Linux Redhat ?

 

[fatiha@monServeur]# rpm -q –qf ‘%{NAME}-%{VERSION}(%{ARCH})\n’  php-mysql-4.1.2-2.19
php-mysql-4.1.2(i386)

Voilà ce qu’on peut trouver dans man rpm à ce sujet :

QUERY-OPTIONS
[--changelog] [-c,--configfiles] [-d,--docfiles] [--dump] [--filesbypkg]  [-i,--info]  [--last]  [-l,--list]  [--pro­
vides] [--qf,--queryformat QUERYFMT] [-R,--requires] [--scripts] [-s,--state] [--triggers,--triggerscripts]

Ci-dessous toutes les variables que vous pouvez passer en paramètre de l’option –qf :

rpm –querytags
HEADERIMAGE
HEADERSIGNATURES
HEADERIMMUTABLE
HEADERREGIONS
HEADERI18NTABLE
SIGSIZE
SIGPGP
SIGMD5
SIGGPG
PUBKEYS
DSAHEADER
RSAHEADER
SHA1HEADER
NAME
VERSION
RELEASE
EPOCH
SERIAL
SUMMARY
DESCRIPTION
BUILDTIME
BUILDHOST
INSTALLTIME
SIZE
DISTRIBUTION
VENDOR
GIF
XPM
LICENSE
COPYRIGHT
PACKAGER
GROUP
SOURCE
PATCH
URL
OS
ARCH
PREIN
POSTIN
PREUN
POSTUN
OLDFILENAMES
FILESIZES
FILESTATES
FILEMODES
FILERDEVS
FILEMTIMES
FILEMD5S
FILELINKTOS
FILEFLAGS
FILEUSERNAME
FILEGROUPNAME
ICON
SOURCERPM
FILEVERIFYFLAGS
ARCHIVESIZE
PROVIDENAME
PROVIDES
REQUIREFLAGS
REQUIRENAME
REQUIREVERSION
CONFLICTFLAGS
CONFLICTNAME
CONFLICTVERSION
EXCLUDEARCH
EXCLUDEOS
EXCLUSIVEARCH
EXCLUSIVEOS
RPMVERSION
TRIGGERSCRIPTS
TRIGGERNAME
TRIGGERVERSION
TRIGGERFLAGS
TRIGGERINDEX
VERIFYSCRIPT
CHANGELOGTIME
CHANGELOGNAME
CHANGELOGTEXT
PREINPROG
POSTINPROG
PREUNPROG
POSTUNPROG
BUILDARCHS
OBSOLETENAME
OBSOLETES
VERIFYSCRIPTPROG
TRIGGERSCRIPTPROG
COOKIE
FILEDEVICES
FILEINODES
FILELANGS
PREFIXES
INSTPREFIXES
PROVIDEFLAGS
PROVIDEVERSION
OBSOLETEFLAGS
OBSOLETEVERSION
DIRINDEXES
BASENAMES
DIRNAMES
OPTFLAGS
DISTURL
PAYLOADFORMAT
PAYLOADCOMPRESSOR
PAYLOADFLAGS
MULTILIBS
INSTALLTID
REMOVETID
RHNPLATFORM
PLATFORM
AG_RSA
FILENAMES
FSSIZES
FSNAMES
INSTALLPREFIX
TRIGGERCONDS
TRIGGERTYPE

Amusez-vous bien.

Merci Olivier pour cette astuce :)

Comment modifier le format de la date d’un ls sous Linux ?

 

Avec mon collègue, nous avons cherché à modifier le format de la date affichée par la commande :

ls -ltr

[fatiha@monServeur]$ ls -ltr
total 0
-rw-r–r–    1 root     root            7 May 30 14:14 test
-rw-r–r–    1 root     root            7 May 30 14:14 test1
-rw-r–r–    1 root     root            7 May 30 14:14 test2

En effet, voulant ensuite parser et concaténer le résultat, nous souhaitions un format plus simple du style YYYYMMDD.

Comment faire dans ce cas ? Il suffit d’ajouter un paramètre à la commande ls.

[fatiha@monServeur]$ ls -ltrh  –time-style= »+%Y%m%d »
total 0
-rw-r–r– 1 root root 7 20130530 test
-rw-r–r– 1 root root 7 20130530 test1
-rw-r–r– 1 root root 7 20130530 test2

Pour en savoir plus sur le format des dates, tapez « man date » sous linux.