2016-12-26 5 views
0

Je travaille sur un script de traitement par lots dans lequel j'analyse les journaux IIS à l'aide de Log Parser. Donc, j'ai 2 questions ici:Analyseur de journal: Utilisation d'un fichier texte comme entrée dans la clause WHERE

Q1. Ce que je veux, c'est de ne pas voir les entrées ayant un nom d'utilisateur écrit dans un fichier texte. Ainsi, on peut mettre à jour ce fichier texte sans se préoccuper de la syntaxe du code. En d'autres termes, au lieu de mettre tous les noms d'utilisateur (pourrait être environ 30-50) dans la clause 'WHERE' en utilisant 'AND' à nouveau &, je vais avoir un fichier texte ayant la liste des noms d'utilisateur.

Exemple de code:

"LogParser.exe" -i:csv "SELECT DISTINCT date, cs-username, clientun, cs-uri-stem FROM D:\temp.csv WHERE NOT cs-username IN ('NULL';'abc';'def';'hij';'and_so_on')" >D:\final_output.txt -o:NAT -rtp:-1 

J'ai essayé de le faire d'abord par sous-requête, mais il est pas pris en charge dans l'analyseur Log il semble. J'ai trouvé OPENROWSET comme une solution here mais cela ne semble pas fonctionner pour moi ou peut-être que je ne comprends pas comment le faire fonctionner. Une autre solution que j'ai trouvée était pour SQL et ne fonctionnait pas pour l'analyseur de journal.

Q2. Je veux que les journaux soient lus entre les dates mentionnées. Donc, je prends un début et une date de fin de l'utilisateur au format AAAA-MM-JJ et de les mettre dans la requête

"LogParser.exe" -i:iisw3c "SELECT DISTINCT cs-username, REVERSEDNS(C-IP), date, cs-uri-stem, FROM \logs\location\* WHERE date BETWEEN %date_1% AND %Date_2%" >D:\temp.csv -o:csv 

L'erreur que je reçois ici est:

Error: WHERE clause: Semantic Error: left interval of BETWEEN operator ("'2016-02-15'") has a different type than operand ("date")

S'il vous plaît noter, la Le fichier de sortie généré à partir du Q2 est utilisé comme entrée dans Q1.

Répondre

0

Q1: Au lieu de filtrer les données à l'aide de l'utilisation de logparser findstr et les commutateurs /g:file /v pour filtrer les fichiers d'entrée ou des lignes de sortie (selon le cas)

Q2: Les chaînes ne sont pas horodatages. Utiliser

BETWEEN TO_TIMESTAMP('%date_1%','yyyy-MM-dd') AND TO_TIMESTAMP('%date_2%','yyyy-MM-dd') 
+0

Ok. Donc, si j'utilise 'findstr'. Puis-je mettre un fichier dans le paramètre '/ v'? Comme, 'findstr/v excluded.txt' Comme dit, le fichier aura les noms d'utilisateurs qui doivent être exclus. –

+0

@MoktikDhawan, le '/ v' demande des lignes qui ne correspondent pas aux chaînes/modèles fournis, vous utilisez le commutateur'/g: file.txt' pour indiquer la source des chaînes/modèles à faire correspondre. La combinaison des deux récupérera les lignes qui ne correspondent pas aux chaînes/modèles dans le fichier. –

+0

Vous l'avez maintenant. Je n'ai pas vu le fichier/g: en paramètre. J'ai pensé que c'est une fonction différente. Ma faute. Je vais tester cette fois et mettra à jour! Merci beaucoup. –