Bonjour,

J'ai fais un petit script shell qui permet de transformer un texte d'APACHE access log en un fichier texte. Et a l'aide de se fichier texte avec SqlLdr , je peu insérer ces donnée dans une table de base de données.


Mon premier problème est:
J'ai besoin de 'Trapper' si ma chaine contient un \n (l'équivalent d'un <Enter> , nah?) , Comment je pourrais faire?

Deuxieme probleme:
J'ai ma ligne d'access log parsé , qui me donne une chaine semblable a ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
; ; ; ;15
 ; ; ; ; ;cacpx1oruasd01 ; ; ;- ; ; ; ; ; ; ; ; ;"POST/oprocmgr-service/oprocmgr-service ;200 ;15/Jan/2008:02:36:25-0500 ; ; ;- ; ; ; ; ; ;
Comment pourrais-je faire en sorte que chaque entrée soient determiné par un ' ;' parce que comme c'est en se moment j'ai mon fichier config qui ressemble a ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
LOAD DATA INFILE 'Log.out'
APPEND
INTO TABLE T_APACHEAccesLog
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
( Percent varchar(622224) ,
 RemoteIP varchar(64) ,
 LocalIP varchar(64) ,
 ReturnSize varchar(64) , 
 ReturnSizeCLF varchar(64) , 
 CookieServer varchar(64) , 
 MicroSec varchar(64) , 
 EnvironementVar varchar(64) ,
 FileName varchar(64) ,
 RemoteHost varchar(64) ,
 RequestProtocol varchar(64) ,
 HeaderLineRequest varchar(64) ,
 RemoteLogName varchar(64) ,
 RequestMethod varchar(64) ,
 FromAnotherModule varchar(64) ,
 OnTheReply varchar(64) ,
 CanonicalPortServ varchar(64) ,
 PortLocalOrRemote varchar(64) ,
 ChildProcessId varchar(64) ,
 ChildProcessIdOrThread varchar(64) ,
 QueryString varchar(2048) ,
 FirstLineQuery varchar(2048) ,
 Status varchar(64) ,
 TimeStandard varchar(64) ,
 TimeFormated varchar(64) ,
 TimeForRequestSec varchar(64) ,
 RemoteUser varchar(64) ,
 URL varchar(64) ,
 CanonicalServerName varchar(64) ,
 ServerName varchar(64) ,
 ConnectionStatusCompleted varchar(64) ,
 ReceivedByteWHeader varchar(64) ,
 SentByteWHeader varchar(64)
)
(La raison pourquoi mon premier champ a une mesure astronomique, est que tout la ligne qui serait sensé aller dans ses colones respectives, s'envont dans la premiere colone. On dirait qu'il ne prend pas le ; comme délimiteur de champ...


Merci a vous de m'aider.