Как вывести этот текстовый файл в формат таблицы с помощью PowerShell? - PullRequest
0 голосов
/ 04 мая 2020

Вот мой файл .txt:

    CH: "g@email.org", "j@email.org" 
    DL: "y@email.org", "ri@email.org" 
    KM: "b@email.org", "n@email.org" 
    CE: "tap@email.org", "k@email.org" 
    DE: "pi@email.org", "sp@email.org" 
    KL: "reedc@email.org", "be@email.org" 
    PR: "ks@email.org", "bt@email.org" 
    EC: "brn@email.org" 

Я хочу, чтобы результат выглядел примерно так:

     Building | Email
     CH:       g@email.com

Я новичок в PowerShell, пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Я не совсем понимаю, что вам нужно.

Если это ваши данные, это уже таблица, это попытка форматирования.

'
CH: "g@email.org", "j@email.org" 
DL: "y@email.org", "ri@email.org" 
KM: "b@email.org", "n@email.org" 
CE: "tap@email.org", "k@email.org" 
DE: "pi@email.org", "sp@email.org" 
KL: "reedc@email.org", "be@email.org" 
PR: "ks@email.org", "bt@email.org" 
EC: "brn@email.org"
' | 
Out-File -FilePath 'D:\Temp\EmailData.txt'

Get-Content -Path 'D:\Temp\EmailData.txt'
<#
# Results

CH: "g@email.org", "j@email.org" 
DL: "y@email.org", "ri@email.org" 
KM: "b@email.org", "n@email.org" 
CE: "tap@email.org", "k@email.org" 
DE: "pi@email.org", "sp@email.org" 
KL: "reedc@email.org", "be@email.org" 
PR: "ks@email.org", "bt@email.org" 
EC: "brn@email.org
#>

Вы можете просто прочитать это как таблицу ...

Import-Csv -Path 'D:\Temp\EmailData.txt' -Delimiter ':' -Header Building, Email 
<#
# Results

Building Email                           
-------- -----                           
CH       g@email.org, "j@email.org"      
DL       y@email.org, "ri@email.org"     
KM       b@email.org, "n@email.org"      
CE       tap@email.org, "k@email.org"    
DE       pi@email.org, "sp@email.org"    
KL       reedc@email.org, "be@email.org" 
PR       ks@email.org, "bt@email.org"    
EC       brn@email.org  
#>

... и вывести обратно. Тем не менее, это немного избыточно.

Import-Csv -Path 'D:\Temp\EmailData.txt' -Delimiter ':' -Header Building, Email | 
Export-Csv -Path 'D:\Temp\EmailData.csv' -NoTypeInformation

Просмотр исходных данных

Get-Content -Path 'D:\Temp\EmailData.csv'
<#
# Results

"Building","Email"
"CH","g@email.org, ""j@email.org"" "
"DL","y@email.org, ""ri@email.org"" "
"KM","b@email.org, ""n@email.org"" "
"CE","tap@email.org, ""k@email.org"" "
"DE","pi@email.org, ""sp@email.org"" "
"KL","reedc@email.org, ""be@email.org"" "
"PR","ks@email.org, ""bt@email.org"" "
"EC","brn@email.org" 
#>

Просмотр таблицы

Import-Csv -Path 'D:\Temp\EmailData.csv'
<#
# Results

Building Email                           
-------- -----                           
CH       g@email.org, "j@email.org"      
DL       y@email.org, "ri@email.org"     
KM       b@email.org, "n@email.org"      
CE       tap@email.org, "k@email.org"    
DE       pi@email.org, "sp@email.org"    
KL       reedc@email.org, "be@email.org" 
PR       ks@email.org, "bt@email.org"    
EC       brn@email.org
#>

Если вы говорите, вы хотите выше, посмотрите в файл, скажем, для печати позже, вы можете просто вывести его таким образом.

Import-Csv -Path 'D:\Temp\EmailData.csv' | 
Out-File -FilePath 'D:\Temp\EmailData.dat'

Get-Content -Path 'D:\Temp\EmailData.dat'
<#
# Results

Building Email                           
-------- -----                           
CH       g@email.org, "j@email.org"      
DL       y@email.org, "ri@email.org"     
KM       b@email.org, "n@email.org"      
CE       tap@email.org, "k@email.org"    
DE       pi@email.org, "sp@email.org"    
KL       reedc@email.org, "be@email.org" 
PR       ks@email.org, "bt@email.org"    
EC       brn@email.org
#>

Расширения файлов действительно не важны. Я просто сделал это, чтобы показать, что работаю со всеми теми же вещами, одинаково.

0 голосов
/ 04 мая 2020

Это довольно легко решить.

Итак, давайте предположим, что ввод находится в текстовом файле с именем Buildings.txt. Мы можем загрузить его в память следующим образом:

$textFile = Get-Content .\Buildings.txt

Далее мы можем разделить этот файл на строки, вызвав метод .Split() и передав ему перегрузку новой строки, которая выглядит так:

$Lines = $textFile.Split("`n")
$lines.Count
>8

Затем мы можем просто пройти по каждой строке, а затем разделить их на символ двоеточия, : и, наконец, создать объект для отправки на экран или помещения в файл или что-то еще.

ForEach($l in $Lines){
    $building = $l.Split(":")[0].Trim()
    $email    = $l.Split(":")[1].Trim()
    [pscustomObject]@{
        Building = $building;
        Email = $email
    }
}

Запуск, который дает нам этот формат, который является полезным для дальнейшей автоматизации:

Building Email                            
-------- -----                            
CH       "g@email.org", "j@email.org"     
DL       "y@email.org", "ri@email.org"    
KM       "b@email.org", "n@email.org"     
CE       "tap@email.org", "k@email.org"   
DE       "pi@email.org", "sp@email.org"   
KL       "reedc@email.org", "be@email.org"
PR       "ks@email.org", "bt@email.org"   
EC       "brn@email.org"                  

Это должно направить вас в правильном направлении. Если нет, оставьте комментарий :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...