NobleMan
NobleMan

Reputation: 515

Combine all content from several files, find matching strings and get a count of each line

I know how to get the data and search through it using some pattern. But that is not what I need.

Get-ChildItem -recurse -Filter *.xml | Get-Content | Select-String -pattern "something here"  

I am searching through 100's of GPO xml files and we are trying to remove GPO's that perform the same thing over and over again. I want to find the unique values and combine them in one big happy gpo and get rid of all the redundant ones.

My goal :

1) Get all information from all *.xml files from 100's of sub folders and combine them into one file.

2) Find all lines that contain the same string and get a count of that string. I need a count for all strings in the combined file.

3) My goal is to find the lines that are unique and save them to a file, for further use.

Upvotes: 2

Views: 119

Answers (1)

Jon Tirjan
Jon Tirjan

Reputation: 3694

Here's a quick-and-dirty approach using a Hashtable. Since the Hashtable setter performs an "update or create", you'll end up with a distinct list:

$ht = @{}
Get-ChildItem -recurse -Filter *.xml | Get-Content | %{$ht[$_] = $true}
$ht.Keys

Edit: Just saw you wanted counts as well. You can do this:

$ht = @{}
Get-ChildItem -recurse -Filter *.xml | Get-Content | %{$ht[$_] = $ht[$_]+1}
$ht

To export to CSV:

$ht.GetEnumerator() | select key, value | Export-Csv D:\output.csv

Upvotes: 2

Related Questions