我是PowerShell的新手。我非常感谢您为以下提供的任何帮助。我有一个powershell脚本,但无法完成从文本文件中获取所有数据字段。
我有一个文件1.txt,如下所示。
我正在尝试从下面的表格格式的文件中提取“pid”和“ctl00_lblOurPrice”的输出,以便我可以在excel中打开它。列标题并不重要。 :
pid ctl00_lblOurPrice
0070362408 $ 6.70
008854787666 $ 50.70
目前我只能获得以下pid。想得到每个pid的价格。 - >
0070362408
008854787666
C:\扫描\ 1.txt的:
This is sentence 1.. This is sentence 1.1... This is sentence A1...
fghfdkgjdfhgfkjghfdkghfdgh gifdgjkfdghdfjghfdg
gkjfdhgfdhgfdgh
ghfghfjgh
...
href='http://example.com/viewdetails.aspx?pid=0070362408'>
This is sentence B1.. This is sentence B2... This is sentence B3...
GFGFGHHGH
HHGHGFHG
<p class="price" style="display:inline;">
ctl00_lblOurPrice=$6.70
This is sentence 1.. This is sentence 1.1... This is sentence A1...
fghfdkgjdfhgfkjghfdkghfdgh gifdgjkfdghdfjghfdg
gkjfdhgfdhgfdgh
ghfghfjgh
...
href='http://example.com/viewdetails.aspx?pid=008854787666'>
This is sentence B1.. This is sentence B2... This is sentence B3...
6GBNGH;L
887656HGFHG
<p class="price" style="display:inline;">
ctl00_lblOurPrice=$50.70
...
...
当前的powershell脚本:
$files=Get-ChildItem c:\scan -recurse
$output_file = ‘c:\output\outdata.txt’
foreach ($file in $files) {
$input_path = $file
$regex = ‘num=\d{1,13}’
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % {
($_.Value) -replace "num=","" } | Out-File $output_file -Append }
提前感谢您的帮助
答案 0 :(得分:0)
我将假设您在代码中表示pid=\d{1,13}
,或者您的示例文本应该是num=
而不是pid=
。我们将假设它实际上应该是pid
。
在这种情况下,我们将整个文件转换为一个带有-Join ""
的长字符串,然后将其拆分为&#34; href&#34;为每个要解析的站点创建记录。然后我们匹配pid =并在遇到非数字字符时结束,然后我们查找一个美元金额($后跟一个数字,然后是一个句点,然后是另外两个数字)。
当我们有一对PID /价格匹配时,我们可以创建一个具有两个属性PID和Price的对象,并输出它。为此,我将它分配给一个数组,以便以后使用。如果您没有PSv3或更高版本,则必须将[PSCustomObject][ordered]
更改为New-Object PSObject -Property
,但这会失去属性的顺序,所以我更喜欢前者,并在我的示例中使用它。
$files=Get-ChildItem C:\scan -recurse
$output_file = 'c:\output\outdata.csv'
$Results = @()
foreach ($file in $files) {
$Results += ((gc $File) -join "") -split "href" |?{$_ -match "pid=(\d+?)[^\d].*?(\$\d*?\.\d{2})"}|%{[PSCustomObject][ordered]@{"PID"=$Matches[1];"Price"=$Matches[2]}}
}
$Results | Select PID,Price | Export-Csv $output_file -NoTypeInformation