2017-08-05 6 views
1

J'ai un fichier journal dont les données sont séparées par "|" symbole. CommeComment traiter les données de journal personnalisées à l'aide de Powershell?

"Username|servername|access|password|group" 
"Username|servername|access|password|group" 

J'ai besoin de valider les données. Et, Si la colonne de groupe (enregistrement) manque d'informations ou vide. Je dois écrire seulement cette ligne dans un autre fichier. Aidez-moi, s'il vous plaît. Merci d'avance.

Répondre

2

Vous pouvez utiliser 'Import-CSV avec -Delimiter '|'. Si votre fichier n'a pas de ligne d'en-tête, vous devrez également utiliser -Header pour le définir. Vous pouvez ensuite utiliser Where pour filtrer les lignes de groupe vides et Export-CSV avec -Delimiter pour créer un nouveau fichier de ces lignes.

Par exemple:

Import-CSV 'YourLog.log' -Delimiter '|' -Header 'Username','Servername','Access','Password','Group' | 
    Where {$_.'Group' -eq ''} | 
    Export-CSV 'EmptyGroupLines.log' -Delimiter '|' 
+1

Merci pour la réponse Mark, je vais essayer de revenir avec mes résultats. – Subhantech

0

Si la colonne de votre groupe est toujours au même endroit, ce qui semble être le cas, vous pouvez utiliser la méthode split. Vous pouvez certainement rogner le code. J'ai utilisé le ci-dessous comme un exemple de la façon dont vous pourriez utiliser split.

L'instruction foreach consiste à parcourir chaque ligne de votre fichier. if (! $ ($ Groupstring.Split ('|') [4])) vérifie si elle est nulle.

$groupstring = 'Username|servername|access|password|group' 
$groupstring.Split('|')[4] 


foreach ($item in $collection) 
{ 
    if (!$($groupstring.Split('|')[4])) 
    { 
     Write-Host "variable is null" 
    } 
} 

Espérons que cela aide. Merci, Tim.

+0

Merci pour la réponse Tim, je vais essayer de revenir avec mes résultats. – Subhantech

+0

Pas de soucis Subhantech. En regardant ma réponse, je n'ai pas exporté toute la ligne que vous avez demandée. Mark Wragg et @mjoliner ressemblent à de bonnes réponses. –

+0

Non Non Tim, j'apprécie votre réponse. Pour moi, il n'y a pas encore de réponse sûre car je valide toutes les possibilités. Et, j'essaie votre solution aussi. Ce qui est bon. La première méthode que j'ai fait était la méthode de division. C'est pourquoi je n'ai pas vérifié vos solutions immédiatement. J'ai aimé la réponse de Mark car elle a fonctionné pour moi. Mais, il y a un long chemin à parcourir. Comme mon script est grand et j'apprends toutes les possibilités. L'exemple que j'ai donné en question est juste un résumé de ce que je veux. – Subhantech

3

Si vous recherchez simplement des données manquantes, vous pouvez effectuer une vérification rapide en utilisant un regex de '(\ S + \ |) {4} \ S +'. Utilisez Get-Content avec le paramètre -ReadCount, et vous pouvez travailler par lots de plusieurs milliers d'enregistrements à la fois, en minimisant les e/s disque et l'utilisation de la mémoire sans les parcourir un seul enregistrement à la fois.

Get-Content $inputfile -ReadCount 2000 | 
foreach { 
      $_ -notmatch '(\S+\|){4}\S+' | 
      Add-Content $outputfile 
     } 
+0

Merci pour la réponse Miolinor, je vais essayer de revenir avec mes résultats. – Subhantech