有没有一种方法可以反转文本文件中的两行以创建哈希表?

时间:2019-06-27 18:22:42

标签: powershell

我有一个白名单表(txt文件),其格式为注释和IP地址对,如下所示:

comment about 1.2.3.4
1.2.3.4
comment about 5.6.7.8
5.6.7.8

我正在尝试从文本文件中获取内容并创建对的哈希表的方式,其中IP地址为键/名称,注释为值(因为我不在乎关于评论的唯一性。

我已经弄清楚了如何使用无重复的伪白名单创建一个以注释为键,IP为值的哈希表。但是我的实际白名单中有大量重复的评论。否则,我只会这样做,然后反转哈希值。在创建哈希之前,我需要像下面那样将行配对。我只是停留在如何翻转评论和IP上。

Get-Content $whitelist -ReadCount 2 | ForEach-Object{($_ | Where{![String]::IsNullorEmpty($_)}) -Join "="} > $joinedTable

$hash = Get-Content -Path $joinedTable -Raw | ConvertFrom-StringData

3 个答案:

答案 0 :(得分:0)

我认为这将满足您的要求

$whitelist = 'PATH TO THE WHITELIST.TXT FILE'

# read the whitelist.txt file as string array and skip empty or whitespace-only lines
$data      = @(Get-Content $whitelist) -match '\S'
$whiteHash = @{}
for ($i = 0; $i -lt $data.Count -1; $i += 2){
    $key = $data[$i + 1].Trim()
    $whiteHash[$key] = $data[$i].Trim()
}

$whiteHash

输出

Name                           Value                                                                                                               
----                           -----                                                                                                               
1.2.3.4                        comment about 1.2.3.4                                                                                               
5.6.7.8                        comment about 5.6.7.8

答案 1 :(得分:0)

您可以使用带有模式的convertfrom-string,如下所示:

$pattern=@"
{Comment*:A comment 1}
{IP:IP1}
{Comment*:A other comment 2}
{IP:IP2}
"@

Get-Content "c:\temp\test.txt" | ConvertFrom-String -TemplateContent $pattern

答案 2 :(得分:0)

要从我的评论中回答,

  • 这还将保存中间文件$ joinedtable。
  • 使用索引[1,0]反转输入线对的顺序
$whitelist = '.\whitelist.txt'

$hash = Get-Content $whitelist -ReadCount 2 | ForEach-Object{
    ($_ | Where{![String]::IsNullorEmpty($_)})[1,0] -Join "="
   } | ConvertFrom-StringData
$hash