Есть ли способ перевернуть две строки в текстовом файле для создания хэш-таблицы? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть таблица белого списка (текстовый файл), отформатированная с парами комментариев и 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 голосов
/ 27 июня 2019

Вы можете использовать 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
0 голосов
/ 27 июня 2019

Чтобы ответить на мой комментарий,

  • , который также сохраняет промежуточный файл $ jointable.
  • обратный порядок пар входных линий с использованием индекса [1,0]
$whitelist = '.\whitelist.txt'

$hash = Get-Content $whitelist -ReadCount 2 | ForEach-Object{
    ($_ | Where{![String]::IsNullorEmpty($_)})[1,0] -Join "="
   } | ConvertFrom-StringData
$hash
0 голосов
/ 27 июня 2019

Я думаю, что это будет делать то, что вы хотите:

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...