【问题标题】:Format results in table在表格中格式化结果
【发布时间】:2013-07-15 00:14:11
【问题描述】:

我下面的脚本通过多个 txt 文件递归地搜索特定的部件号 (459279)。

set-location C:\Users\admin\Desktop\PartNumbers\
$exclude = @('PartNumbers.txt','*.ps1')
$Line = [Environment]::NewLine
Get-ChildItem -Recurse -Exclude $exclude | select-string 459279 | group count | Format-Table -Wrap -AutoSize -Property Count,
@{Expression={$_.Group | foreach { $_.filename} | Foreach {"$_$Line"} }; Name="Filename"},
@{Expression={$_.Group | foreach {$_.LineNumber} | Foreach {"$_$Line"} }; Name="LineNumbers"} | Out-File 459279Results.txt

我的结果是:

Count Filename                           LineNumbers
----- --------                           -----------
    2 {Customer1.txt                     {2         
      , Customer2.txt                    , 3        
      }                                  }          

如果可能的话,我的理想结果是:

Part Number: 459279
Count: 2

Filename                           LineNumbers
--------                           -----------
Customer1.txt                      2         
Customer2.txt                      3        

我已从“PartNumbers.txt”手动检索部件号“459279”并使用脚本进行搜索。

我似乎无法删除/替换大括号和逗号来显示一个干净的列表。

我希望最终做的是递归搜索“PartNumbers.txt”并生成一个报告,其中每个部件号都以上述样式附加到下一个部件号。

PartNumbers.txt 已格式化:

895725
939058
163485
459279
498573

Customer*.txt 被格式化:

163485
459279
498573

【问题讨论】:

  • 如果您提供 PartNumbers.txt 的摘录会很有帮助,以便我们查看格式。很难告诉你如何排除逗号和花括号而不知道它们来自哪里。
  • 抱歉,我现在添加了额外的细节。我想指出,在我给出的示例中,我手动从文本文件中获取了部件号并将其复制到脚本中。我还没有通过 PartNumbers.txt 循环。谢谢。

标签: powershell format output tabular


【解决方案1】:

这样的事情应该可以工作:

$exclude = 'PartNumbers.txt', '*.ps1'
$root    = 'C:\Users\admin\Desktop\PartNumbers'
$outfile = Join-Path $root 'loopResults.txt'

Get-Content (Join-Path $root 'PartNumbers.txt') | % {
  $partno = $_
  $found = Get-ChildItem $root -Recurse -Exclude $exclude `
             | ? { -not $_.PSIsContainer } `
             | Select-String $partno `
             | % {
               $a = $_ -split ':'
               New-Object -Type PSCustomObject -Property @{
                 'Filename'    = Split-Path -Leaf $a[1];
                 'LineNumbers' = $a[2]
               }
             }

  "Part Number: $partno"
  'Count: ' + @($found).Count
  $found | Format-Table Filename, LineNumbers
} | Out-File $outfile -Append

【讨论】:

  • 这是完美的谢谢。关于如何遍历 PartNumbers.txt 并将每个部件号结果逐个附加的任何提示?
  • 只需添加一个迭代该文件内容的外部循环。查看更新的答案。
  • 谢谢,这太棒了。我发现有趣的是,如果零件编号仅出现 1 次,则计数结果为空。不过没问题。
  • 我正在努力解决 |我试图添加的 Out-File C:\Users\admin\Desktop\PartNumbers\loopResults.txt -append。我把它放在 $found | 之后。格式表文件名、行号。它会生成 txt 文件,但无法正确显示 - 我应该将其添加到其他地方还是无法导出?
  • 您不能从foreach ($item in $set) 循环流水线输出。如果要流水线输出,则需要调整外循环以使其与流水线配合使用。查看更新的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
相关资源
最近更新 更多