Get-Content Powershell, фильтр с помощью ARRAY, а затем набор содержимого - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь использовать powershell для Get-Content из файла .txt, а затем set-content после фильтрации данных с использованием массива.Я вижу множество примеров, как сделать это для 1 слова, но не для любого слова в массиве.Я искал и пытался принять другие решения здесь, и ничего не работает для меня.Что я могу добавить в свой цикл foreach, чтобы добиться этого?Я чувствую, что у этого будет очень простой ответ, и я слишком усложняю его.

#Put account numbers into array.
    $acctArr = "123456789101","121314151617","181920212223","242526272829"

#Use the array to Output a new NB file that only contains the accounts from the array. 
    $fileData = (Get-Content -Path "C:\testfile.txt") | Select-String -Pattern $acctArr -SimpleMatch

foreach($item in $fileData){

    <# Need code here to figure out how to check the $fileData array for strings in $acctArr 
    then if a line of the file has one of the numbers in $acctArr let's do a set-content or Out-file of some kind #>

}

Редактировать : я пробовал решения из этого , но set-content, кажется, устанавливает весь файл, даже строки, которые не соответствуют тому, что в моем $acctArr

Другое Редактирование: Я тоже это пробовал.Я могу написать переменную $fileData и разместить ее на экране правильно, но если я сделаю набор содержимого, он не будет записывать в файл, как я ожидал:

$fileData = (Get-Content -Path "C:\Folder\testfile.txt") | Select-String -Pattern $acctArr -SimpleMatch
$fileData | Set-Content Output.txt

1 Ответ

1 голос
/ 21 июня 2019

вот один из способов сделать это. [ ухмыляясь ] он строит регулярное выражение ИЛИ, беря целевые слова и соединяя их в строку с разделителями-пробелами. затем он запускает -match с входным файлом справа от оператора и регулярным выражением слева. это дает вам все строки, которые соответствуют любому одному или нескольким словам в списке слов.

$WordSourceFile = 'C:\Temp\Grouping-Words-List_2019-06-12.log'
$WordCount = 3
$TargetFile = 'C:\Temp\Grouping-Strings-List_2019-06-12.log'


$WordsToFind = Get-Random -Count $WordCount -InputObject (
    Get-Content -LiteralPath $WordSourceFile |
    Select-Object -SkipLast 3
    )
$Regex_WTF = $WordsToFind -join '|'

$InLines = Get-Content -LiteralPath $TargetFile
$OutLines = @($InLines -match $Regex_WTF)

'Words to find            = {0}' -f "$WordsToFind"
'Lines in the Target File = {0}' -f $InLines.Count
'Lines in the Output list = {0}' -f $OutLines.Count
'=' * 50
$OutLines

вывод ...

Words to find            = Tejano Taiko Banjo
Lines in the Target File = 1859
Lines in the Output list = 18
==================================================
Banjo
Banjo Bluegrass Guitar
Banjo Bluegrass Guitar Instrumental
Banjo Bluegrass Guitar Instrumental Railroad
Banjo Celtic Instrumental
Banjo Dupe Instrumental
Banjo Female Guitar
Banjo Guitar Rockabilly Rowdy
Banjo Instrumental
Banjo Instrumental Live
Blues Country Guitar Latin Tejano
Country Guitar Latin Tejano
Drum Dupe Instrumental Japanese Taiko
Drum Instrumental Japanese Taiko
Dupe Guitar Latin Rowdy Tejano
Guitar Latin Spanish Tejano
Guitar Latin Tejano
Guitar Tejano

Вы можете сохранить $Outlines в формате CSV или в текстовом файле при необходимости.

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