【发布时间】:2016-08-16 11:36:48
【问题描述】:
我有两个关于使用 powershell 从 CSV 文件中导出信息的问题。我真的没有太多编码/使用 powershell 的经验,而且我一直在从在线教程/论坛等中破解一些代码。
我有一个包含 CSV 文件的文件夹,其中包含许多列。我正在编写的第一段代码是从每个以“_HIPOTS.csv”结尾的文件中提取包含“CSEP DDS 匹配”或“CSEP 不匹配”的每一行,并将其导出到一个新文件中。我的代码是:
$path = "S:\TEST AREA\ac00418\OpsPlan\Test\Output\FY1\*.*"; # Directory containing csv files
$csvFiles = Get-ChildItem -Path $path -Filter *_HIPOTS.csv; # Get the csv files
$destination = "S:\TEST AREA\ac00418\OpsPlan\Test\Output\FY1_CSEP_HighPotentials.csv"
#$content = $null
$content = @()
ForEach($csv in $csvFiles){
#IMPORT
$nodes = import-csv $csv.Fullname
$CSEPs = $nodes|where {$_.NodeSymbolName -match "CSEP DDS Matched" -and $_.NodeSymbolName -match "CSEP Unmatched"}
$allCSEPs += $CSEPs
}
$allCSEPs|Export-csv $destination -NoTypeInformation
问题是,当我运行它时,它没有搜索“CSEP Unmatched”,而且它似乎在 for 循环中运行了两到三遍,因为导出中似乎有很多重复项。有人可以帮忙吗?
第二个问题是我必须从每个文件的另一列中导出包含最小值的行。我有一个与第一个类似的代码,只是我不知道如何从列中选择最小值:
$path = "S:\TEST AREA\ac00418\OpsPlan\Test\Output\FY1\*.*"; # Directory containing csv files
$csvFiles = Get-ChildItem -Path $path -Filter *_HIPOTS.csv; # Get the csv files
$destination = "S:\TEST AREA\ac00418\OpsPlan\Test\Output\LowestNodePressure.csv"
#$content = $null
$content = @()
ForEach($csv in $csvFiles){
#IMPORT
$nodes = import-csv $csv.Fullname
$min = Measure-Object -Property $_.NodePressure -Minimum
$minpressure += $min
}
$minpressure|Export-csv $destination -NoTypeInformation
以下是信息显示方式的示例。请记住,有数以千计的此类列和更多列。这些只是我正在尝试编写的代码的相关代码。
NAME NodeSymbolName NodePressure NodeResultFlow
6430050001023 CSEP Unmatched 24 -25
60200100000007 CSEP DDS Matched 49 -106
60200100000072 CSEP DDS Matched 25 -157
60200100000148 CSEP DDS Matched 35 -9
我为这个庞大的帖子道歉,但我想我还不如用一块石头杀死两只鸟!希望我已经足够清楚我想要实现的目标。感谢任何人提供的任何帮助。
谢谢,
J
【问题讨论】:
-
在第一个示例的
Where-Object子句中使用-or而不是-and -
另外,你不是多次运行脚本(->重复)吗?
-
您好,非常感谢您的回复。我更改了 - 并且更改为 - 或者现在包含了不匹配的 CSEP,但我仍然得到重复。我没有多次运行脚本。我只是使用 for 循环读取文件夹中的每个文件一次,因此相同的信息应该只导出一次。
-
$content = @()是干什么用的? -
嗨,克里斯,有人告诉我应该声明一个空数组,以便将所有内容导出到其中。直到现在我才意识到我的意思是写 $allCSEPs = @() 这是一个非常愚蠢的错误。不再重复!不过,仍然有点不确定如何从 NodePressure 列中取出最小值。感谢您迄今为止的帮助。
标签: csv powershell export minimum