Powershell脚本可解析txt文件中的选定信息并将其输出到csv

时间:2018-10-17 14:25:55

标签: powershell text-parsing

检查了有关解析数据的FAQ,并尝试了一些想法,但是没有任何一种方法可以满足我的需求。我需要有关如何构建PS脚本的建议,该脚本将读取我的.txt文件中的以下信息并将仅选定的信息输出到.csv

products

CSV文件将包含三列:

eamoptns.ftr.0009: LoyaltyPrint3 = "     included with your TV purchase"
eamoptns.ftr.0010: LoyaltyPrint3 = "     included with your TV purchase"

Grand Total: 2 match(es) found.

需要PS脚本来获取商店#(0009)并将其添加到“商店”列下。如果该行在安装列下包含“您的电视购买中包括”,则添加True(如果未添加),然后添加False,然后在date(日期)列中添加日期。

从注释尝试代码

Store    Install     Date

1 个答案:

答案 0 :(得分:1)

按照建议

  • 选择与您的要求匹配的正则表达式(请参见regex101.com
  • 重复匹配并比较匹配的文本
  • 为您的csv生成[PSCustomObject]

## Q:\Test\2018\10\17\SO_52857274.ps1
$RE = [RegEx]'^.*?\.(\d{4}):[^"]+"\s*(included with your TV purchase|.*)"$'

$CSV = Select-String '.\my.txt' -Pattern $RE | ForEach-Object {
    IF ($_.Matches.Groups[2].Value -eq 'included with your TV purchase'){
        $Install = $True
    } else {
        $Install = $False
    }
    [PSCustomObject]@{
        Store   = $_.Matches.Groups[1].Value
        Install = $Install
        Date    = (Get-Date).Date
    }
}
$CSV
# $CSV | Export-CSV '.\my.csv' -NoTypeInformation

示例输出:

> Q:\Test\2018\10\17\SO_52857274.ps1

Store Install Date
----- ------- ----
0009     True 2018-10-17 00:00:00
0010     True 2018-10-17 00:00:00
0010    False 2018-10-17 00:00:00