FOR循环从文件中匹配一个名称,然后从第二个文件中获取4个值



嗨,我需要一些帮助让这个工作:)我有一份名单,里面有名字。文件a .

SomeNameA
SomeNameB
SomeNameC
etc

现在我需要从FILE 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

从值与FILE 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:ScriptsFileB.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
    }
}

这是我最后使用的代码:)Thx

metix

Clear-Host
$names = cat 'FileA.txt'
$data =  cat 'FileB.txt'
$outfile = 'C:Tempoutput.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
    }
}

相关内容

  • 没有找到相关文章

最新更新