Need to split up a large patterned text file into multiple text files.
Hello,
I have a 5200 line text file full of DNS zone information. It is formatted such with line 1 being the SOA record, and the last 2 lines of the zone are "Success..." and then "----" and then it repeats with the next zone. An example of the top 2 records looks like the following:
domain1.com. SOA dauth5.server.com. contact.domain1.com. 2018020603 10800 3600 604800 10800webmail.domain1.com. CNAME domain1.com.domain1.com. NS dauth5.server.com.domain1.com. MX 10 mail3.serverhosting.com.domain1.com. A 255.255.138.2mail.domain1.com. CNAME mail3.serverhosting.com.pop.domain1.com. CNAME pop.serverhosting.com.domain1.com. MX 10 mx1-us1.ppe-hosted.com.www.domain1.com. CNAME domain1.com.domain1.com. NS dauth6.server.com.domain1.com. MX 20 mx2-us1.ppe-hosted.com.smtp.domain1.com. CNAME smtp.serverhosting.com.SUCCESS: Getting information for Domain 'domain1.com' complete.---------------domain2.com. SOA dauth5.server.com. admin.server.com. 2018052503 900 600 86400 10800domain2.com. A 192.168.255.2domain2.com. MX 20 mx2-us1.ppe-hosted.com.domain2.com. MX 10 mx1-us1.ppe-hosted.com.www.domain2.com. CNAME domain2.com.mail.domain2.com. CNAME mail4.serverhosting.com.domain2.com. NS dauth5.server.com.domain2.com. NS dauth6.server.com.SUCCESS: Getting information for Domain 'domain2.com' complete.---------------
I would like a powershell script that will take my file as in input, then split the file into multiple text files saved to a specific path. The file name should be the very first word on line1 (domain1.com.text and domain2.com.text in the scenario above), then they should contain all lines up to the "Success:, and the following------" lines. Those can be discarded. So after processing the script given the text file above, I would be left with the following:
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
I prefer to code functions to make the utility more flexible and straightforward to move to a module. I have assumed that the line before the -------- separator is always SUCCESS, is it sometimes FAILURE?
Bill - Using your method, the top line of the resulting text files is missing...example:
domain1.com. SOA dauth5.server.com. contact.domain1.com. 2018020603 10800 3600 604800 10800
Doesn't appear in the resulting file on any of the files created. The first line should always be the SOA line.
Brent - Using your method, the SOA line does appear, but not in order...its like the order gets mixed up and the SOA line appears on line 5 or 6 but not line 1 each time as it should?
Bill Prew
I tested with what you posted and it worked fine here, my test files attached. If you want to post your actual input file I can test here, it may be that that first line has some extra special characters that are causing a problem...
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
I took your dom_dns.txt file, ran it through the script I posted here, and the 4 result files have the first line here.
What version of powershell do you have?
And did you make any changes to the script I posted?
»bp
Chad Killion
ASKER
Can't explain it...but it is working now. I just re-copied the script and changed lines 1 and 2 and re-ran the script and SOA shows up as line #1 now. Sorry for wasting your last 30 minutes! Thanks so much for the help!
Unlimited question asking, solutions, articles and more.
Bill Prew
No worries, glad it's working there now.
»bp
Brent Challis
I checked my code and it consumed the first line when changing the output file name rather than outputting it. I have also added a switch to indicate that you want to delete the output file if it exists.
function ConvertTo-SplitDNSZoneInfoFile{ [CmdletBinding()] Param ( [String]$InputFilePath = "D:\DNSZoneInfo\DNSZoneInfo.txt", [String]$OutFileDirectory = "D:\DNSZoneInfo", [Switch]$Clobber ) if ((Test-Path $InputFilePath) -and (Test-Path $OutFileDirectory)) { $InputFile = Get-Content $InputFilePath $OutFileName = "" foreach ($line in $InputFile) { if ([String]::IsNullOrEmpty($OutFileName)) { if ($line -notlike "--*") { $OutFileName = $line.Split(" ")[0] + "txt" $OutFilePath = Join-Path -Path $OutFileDirectory -ChildPath $OutFileName if ($Clobber -and (Test-Path $OutFilePath)) { Remove-Item $OutFilePath } } } if ($line -like "SUCCESS*" -or $line -Like "--*") { $OutFileName = "" } else { $line | Out-File $OutFilePath -Append } } } else { Write-Warning "Unable to find either $InputFilePath or $OutFileDirectory" }}ConvertTo-SplitDNSZoneInfoFile -Clobber
Open in new window