我有一个包含 CampaignNames 和 ID 的文件。这两个字段由管道分隔|
。ID 由空格分隔。我想查找文件中的所有行(索普þ
包含 ID 的文件(thorpe 分隔)中查找所有行,并将这些行输出到每个名称的单独文件中。该文件通常为 4-7 GB,有时更大。
campaigns.txt
:
姓名|姓名ID 名字|123 212 445 39 第二名|313 939 第三名|219
数据标识文件:
日期þIDþ代码 10-22-14+123+Abc 10-24-16+212+战俘 09-18-15+219
所以我想要创建 3 个文件。FirstName.txt
包含 2 行。SecondName.txt
包含 0 行。 ThirdName.txt
包含 1 行。
我拼凑了来自各种来源的一些代码并想出了这个。但是,我想知道是否有比多次读取数据文件更好的方法。有什么想法吗?
$campaigns = Import-Csv "campaigns.txt" -Delimiter "|"
$datafile = "5282_10-19-2016"
$encoding = [Text.Encoding]::GetEncoding('iso-8859-1')
echo "Starting.."
Get-Date -Format g
foreach ($campaign in $campaigns) {
$campaignname = $campaign.CampaignName
$campaignids = $campaign.CampaignID.split(" ")
echo "Looking for $campaignname - $campaignids"
$writer = New-Object System.IO.StreamWriter($campaignname + "_filtered.txt")
foreach ($campaignid in $campaignids) {
$datareader = New-Object System.IO.StreamReader($datafile, $encoding)
while ($dataline = $datareader.ReadLine()) {
if ($dataline -match $campaignid) {
$data = $dataline.Split("þ")
$writer.WriteLine('{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}', $data[0], $data[3], $data[5], $data[8], $data[12], $data[14], $data[19], $data[20])
}
}
}
$writer.Close()
}
echo "Done!"
Get-Date -Format g