FOR 循环以匹配文件中的名称,然后从第二个文件中获取 4 个值
FOR loop to match a name from file then get 4 values from second file
嗨,我需要一些帮助才能让它工作:)
我有一个列表中有名称的文件。
文件 A.
SomeNameA
SomeNameB
SomeNameC
etc
现在我需要从文件 B 中获取一组行:
ddrObjId_1=SomeNameA
adrrObjType_1=8
adrrObjZone_1=ZONE_A
addrObjIP_1=0.0.0.0
addrObjIP2_1=0.0.0.0
addrObjId_2=SomeNameB
adrrObjType_2=8
adrrObjZone_2=ZONE_B
addrObjIP_2=0.0.0.0
addrObjIP2_2=0.0.0.0
从值与文件 A 中的一个名称匹配的行开始,然后是所有后续行,直到在文件末尾找到另一个匹配项。希望这能更好地解释它:)
所以当我完成后,我需要用数据生成一个新的 FILE C:
address-object SomeNameA
type 1
host 0.0.0.0
mask 0.0.0.0
zone ZONE_A
address-object SomeNameB
type 8
host 0.0.0.0
mask 0.0.0.0
zone ZONE_B
etc
所以我一直在尝试一些不同的脚本,在 StackO 上找到了她,我现在可以扫描文件从我的文件中找到一个词,它获取数据,所以我需要它来获取值,然后创建一个新的文件 包含命令。等.. 这里是代码不工作,但它是一个开始。希望有人能帮我弄明白..
Clear-Host
$array = @('SomeNameA')
$found = @{}
Get-Content 'D:\Scripts\FileB.txt'| % {
$line = $_
foreach ($item in $array) {
if ($line.Split('=')[1] -like $item) { $found[$item] = $true }
foreach ($item in $line | Where-Object{$_ -like 'addrObjId_*=*' -or $_ -like 'addrObjType_*=*'}) {
write-host $item
}
}
}
$found.Keys | Out-File "C:\results.txt"
这应该可以完成工作:
$names = cat '.\fileA.txt'
$data = cat '.\fileB.txt'
$outfile = '.\fileC.txt'
rm -Force $outfile
foreach($d in ([string]$data -split 'addrObjId_\d+='))
{
if ($d -eq "") { continue }
$d = $d -split ' '
$obj = $d[0].Trim()
$type = ($d[1] -split "=")[1]
$zone = ($d[2] -split "=")[1]
$hostip = ($d[3] -split "=")[1]
$maskip = ($d[4] -split "=")[1]
if ($names.Contains($obj))
{
"address-object $obj" | Out-File -Append -FilePath $outfile
"type $type" | Out-File -Append -FilePath $outfile
"host $hostip" | Out-File -Append -FilePath $outfile
"mask $maskip" | Out-File -Append -FilePath $outfile
"zone $zone" | Out-File -Append -FilePath $outfile
}
}
她是我最后用的代码:)
谢谢
metix
Clear-Host
$names = cat 'FileA.txt'
$data = cat 'FileB.txt'
$outfile = 'C:\Temp\output.txt'
if(test-path $outfile){Remove-Item $outfile}
foreach($d in ([string]$data -split 'addrObjId_\d+='))
{
if ($d -eq "") { continue }
$d = $d -split ' '
$obj = $d[0].Trim()
$type = ($d[2] -split "=")[1]
$zone = ($d[3] -split "=")[1]
$hostip1 = ($d[5] -split "=")[1]
$hostip2 = ($d[6] -split "=")[1]
if ($names.Contains($obj))
{
"address-object ipv4 $obj" | Out-File -Append -FilePath $outfile
if ($type -eq '4'){"network $hostip1 $hostip2" | Out-File -Append -FilePath $outfile}elseif($type -eq '1'){"host $hostip1" | Out-File -Append -FilePath $outfile}elseif($type -eq '2'){"range $hostip1 $hostip2" | Out-File -Append -FilePath $outfile}
"zone $zone" | Out-File -Append -FilePath $outfile
}
}
嗨,我需要一些帮助才能让它工作:) 我有一个列表中有名称的文件。 文件 A.
SomeNameA
SomeNameB
SomeNameC
etc
现在我需要从文件 B 中获取一组行:
ddrObjId_1=SomeNameA
adrrObjType_1=8
adrrObjZone_1=ZONE_A
addrObjIP_1=0.0.0.0
addrObjIP2_1=0.0.0.0
addrObjId_2=SomeNameB
adrrObjType_2=8
adrrObjZone_2=ZONE_B
addrObjIP_2=0.0.0.0
addrObjIP2_2=0.0.0.0
从值与文件 A 中的一个名称匹配的行开始,然后是所有后续行,直到在文件末尾找到另一个匹配项。希望这能更好地解释它:)
所以当我完成后,我需要用数据生成一个新的 FILE C:
address-object SomeNameA
type 1
host 0.0.0.0
mask 0.0.0.0
zone ZONE_A
address-object SomeNameB
type 8
host 0.0.0.0
mask 0.0.0.0
zone ZONE_B
etc
所以我一直在尝试一些不同的脚本,在 StackO 上找到了她,我现在可以扫描文件从我的文件中找到一个词,它获取数据,所以我需要它来获取值,然后创建一个新的文件 包含命令。等.. 这里是代码不工作,但它是一个开始。希望有人能帮我弄明白..
Clear-Host
$array = @('SomeNameA')
$found = @{}
Get-Content 'D:\Scripts\FileB.txt'| % {
$line = $_
foreach ($item in $array) {
if ($line.Split('=')[1] -like $item) { $found[$item] = $true }
foreach ($item in $line | Where-Object{$_ -like 'addrObjId_*=*' -or $_ -like 'addrObjType_*=*'}) {
write-host $item
}
}
}
$found.Keys | Out-File "C:\results.txt"
这应该可以完成工作:
$names = cat '.\fileA.txt'
$data = cat '.\fileB.txt'
$outfile = '.\fileC.txt'
rm -Force $outfile
foreach($d in ([string]$data -split 'addrObjId_\d+='))
{
if ($d -eq "") { continue }
$d = $d -split ' '
$obj = $d[0].Trim()
$type = ($d[1] -split "=")[1]
$zone = ($d[2] -split "=")[1]
$hostip = ($d[3] -split "=")[1]
$maskip = ($d[4] -split "=")[1]
if ($names.Contains($obj))
{
"address-object $obj" | Out-File -Append -FilePath $outfile
"type $type" | Out-File -Append -FilePath $outfile
"host $hostip" | Out-File -Append -FilePath $outfile
"mask $maskip" | Out-File -Append -FilePath $outfile
"zone $zone" | Out-File -Append -FilePath $outfile
}
}
她是我最后用的代码:) 谢谢
metix
Clear-Host
$names = cat 'FileA.txt'
$data = cat 'FileB.txt'
$outfile = 'C:\Temp\output.txt'
if(test-path $outfile){Remove-Item $outfile}
foreach($d in ([string]$data -split 'addrObjId_\d+='))
{
if ($d -eq "") { continue }
$d = $d -split ' '
$obj = $d[0].Trim()
$type = ($d[2] -split "=")[1]
$zone = ($d[3] -split "=")[1]
$hostip1 = ($d[5] -split "=")[1]
$hostip2 = ($d[6] -split "=")[1]
if ($names.Contains($obj))
{
"address-object ipv4 $obj" | Out-File -Append -FilePath $outfile
if ($type -eq '4'){"network $hostip1 $hostip2" | Out-File -Append -FilePath $outfile}elseif($type -eq '1'){"host $hostip1" | Out-File -Append -FilePath $outfile}elseif($type -eq '2'){"range $hostip1 $hostip2" | Out-File -Append -FilePath $outfile}
"zone $zone" | Out-File -Append -FilePath $outfile
}
}