PowerShell相當新穎,想知道是否有人可以提供以下內容。基本上,我有一些通過特殊字符($)分開記錄一個.txt文檔(例如)Powershell - 將多行文本分割成單獨的記錄
ID
輸入的日期
名稱
標題
地址
電話
$
ID
輸入的日期
名稱
標題
地址
電話
$
我想在$之間的每一個項目拆分成單獨的「記錄」,這樣我可以通過每個記錄循環。因此,例如,我可以檢查上面的每條記錄,並返回沒有輸入電話號碼的所有記錄的記錄ID。
在此先感謝
PowerShell相當新穎,想知道是否有人可以提供以下內容。基本上,我有一些通過特殊字符($)分開記錄一個.txt文檔(例如)Powershell - 將多行文本分割成單獨的記錄
ID
輸入的日期
名稱
標題
地址
電話
$
ID
輸入的日期
名稱
標題
地址
電話
$
我想在$之間的每一個項目拆分成單獨的「記錄」,這樣我可以通過每個記錄循環。因此,例如,我可以檢查上面的每條記錄,並返回沒有輸入電話號碼的所有記錄的記錄ID。
在此先感謝
如果每個記錄包含的屬性,你可以採取這種方法的一個固定的數字。它通過創建自定義對象循環,同時跳過美元符號線。
$d = Get-Content -Path C:\path\to\text\file.txt
for ($i = 0; $i -lt $d.Length; $i+=7) {
New-Object -TypeName PsObject -Property @{
'ID' = $d[$i]
'Date Entered' = $d[$i+1]
'Name' = $d[$i+2]
'Title' = $d[$i+3]
'Address' = $d[$i+4]
'Phone' = $d[$i+5]
}
}
我曾經有過同樣的要求......這是我做的
$loglocation = "C:\test\dump.txt"
$reportlocation = "C:\test\dump.csv"
$linedelimiter = ":"
$blockdelimiter = "FileSize"
$file = Get-Content $loglocation
$report = @()
$block = @{}
foreach ($line in $file)
{
if($line.contains($linedelimiter))
{
$key = $line.substring(0,$line.indexof($linedelimiter)).trimend()
$value = $line.substring($line.indexof($linedelimiter)+1).trimstart()
$block.Add($key,$value)
if ($block.keys -contains $blockdelimiter)
{
$obj = new-object psobject -property $block
$report += $obj
$block = @{}
}
}
}
$report
$report | Export-Csv $reportlocation -NoTypeInformation
所以通過每一行你循環,定義鍵和值和對象添加到哈希表。一旦鍵包含blockdelimiter,一個新的對象被寫入一個數組並且哈希表被清除。
在我的情況下,linedelimiter是一個冒號,blockdelimiter是一個有效的記錄,所以你將不得不做一些改變。讓我知道這種方法是否適合您的需求,而且您無法找到該做什麼。
P.S.默認情況下,只會顯示數組中第一個對象的noteproperties,因此您必須將數組傳遞給Select-Object並添加所需的所有屬性。
Grts。
不幸的是,沒有固定數量的屬性。如果一個字段沒有條目,則字段從.txt文件中一起丟失。通過將$符號中的每個部分拆分爲它自己的文本文件,我設法得到了我想要的結果。然後,我可以遍歷每個文本文件,並使用模式匹配的select-string cmdlet來提取我需要的位。 有沒有辦法將$符號中的信息拆分成單獨的PsObjects?這至少可以讓我不必輸出一堆.txt文件,然後清理它們。 – user2714683
@ user2714683好的,你怎麼知道第3行是名字?你是否在這個例子中發佈了你正在使用的所有東西?如果每行都有名稱和值,那麼我可以向您展示另一種方法,但您的示例似乎意味着僅提供了該值。 –
是每行都有一個值,但是如果沒有輸入該值,則整行不存在。例如,在我上面的例子中,如果第一條記錄中沒有輸入'Date Entered'的值,那麼整條線不會存在,'Name'值將在第2行。我正在處理凌亂的數據庫輸出,所以我試圖保持我的例子簡單。基本上我只是想將$符號之間的每個部分視爲單獨的記錄。所以我可以讓腳本分別分析每個腳本。 – user2714683