【问题标题】:Powershell Script to parse selected information from txt file and output to csv用于从 txt 文件解析选定信息并输出到 csv 的 Powershell 脚本
【发布时间】:2019-03-22 06:35:05
【问题描述】:

查看了关于解析数据的常见问题解答,并尝试了一些想法,但没有任何方法能按我需要的方式工作。我需要一个关于如何构建一个 PS 脚本的建议,该脚本将读取我的 .txt 文件中的以下信息并将仅选定的信息输出到 .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.

CSV 文件将包含三列:

Store    Install     Date

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

从评论中尝试代码

$PSRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition 
Get-ChildItem $PSRoot -Filter "*Results.txt" | 
  Where-Object { $_.Attributes -ne "Directory" } | ForEach-Object { 
    If (Get-Content $_.FullName | Select-String -Pattern "included with your TV purchase") { 
      New-Object -TypeName PSCustomObject -Property @{
        Club = $A
        Install = $B 
        Date = $C
      } | Export-CSV -Path $PSRoot\Test.csv -Append 
    } 
  }

【问题讨论】:

  • 你能分享一下你一直在努力工作的代码吗?或者,这是要求某人为您写的吗?没有代码的问题一般去superuser.com
  • 有很多方法可以做到这一点,以Regex为例,这个问题确实感觉研究投资为零。
  • 我同意其他人的观点,请提供一些您迄今为止尝试过的内容,然后我们可以提供帮助。
  • 这是我之前使用的示例代码:

标签: powershell text-parsing


【解决方案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

【讨论】:

  • 谢谢你会试一试
  • 这按设计工作,但我无法让它失败?在 my.txt 文件中,我删除了其中一行中的“包含在您购买的电视中”,并且脚本没有记录任何内容。
  • ATM 正则表达式期望 .9999: 模式和双引号中的任何文本完全匹配该行,您应该在您的问题中显示更多示例行以匹配或不匹配。此外,您的代码应该包含在问题中,而不是 cmets。
猜你喜欢
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2020-11-07
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多