user4618954
user4618954

Reputation: 37

Batch or Powershell to find lines equal to value and remove ones that are not

I am attempting to automate the manual validation of a file that I get daily. Currently the file I get is suppose to have 42 characters in a each line, mix characters. But randomly the file comes missing a space or invalid data length in a field. I am lost on how to check each lines length, and then remove the invalid lines from the master file and insert them into their own output file. I have made some head way with line length validation.

Get-Content dailyfile.txt | ForEach-Object { $_ | Measure-Object -Character } >> output.txt

But I cant wrap my head around how to use the output to find the specific line that doesn't equal 42. I may be asking more then a mouth full, but I cant even see light at the end of the tunnel on this one.

Upvotes: 0

Views: 274

Answers (1)

Matt
Matt

Reputation: 46710

So something like this then.

Get-Content dailyfile.txt | Where-Object{$_.Length -lt 42} | Set-Content output.txt

Get-Content returns an array of strings. We use a Where-Object to pass the lines in the text file that contain a length of less than 42. If there is a chance it could be more than -ne would also work.

Mostly because I could not resist I wanted to help you with the code you had in your OP. While it is inefficient and longer this is what you could have done to complete your original code.

$TheAnswertotheUltimateQuestionofLifeTheUniverseandEverything = 42
Get-Content C:\temp\data.log | Where-Object{($_ | Measure-Object -Character | Select-Object -ExpandProperty Characters) -lt $TheAnswertotheUltimateQuestionofLifeTheUniverseandEverything} | Set-Content output.txt

Upvotes: 2

Related Questions