如何让PowerShell的Measure-Object仅输出单列统计结果?
问题:如何输出仅包含行数的CSV文件?
我想要统计CSV文件的行数,执行了以下PowerShell代码:
$csvPath = "some.csv" $lineCount = "linecount.csv" Import-Csv $csvPath | Select-Object -Skip 1 | Measure-Object | Export-CSV $lineCount -NoTypeInformation
得到的linecount.csv输出如下:
"Count","Average","Sum","Maximum","Minimum","Property" "100",,,,,
我期望的输出为:
"Count" "100"
请问该如何实现这一需求?
解决方案
原代码中Measure-Object返回的是包含多个统计属性的对象,Export-CSV会默认导出该对象的所有属性,因此出现了多余列。要得到仅包含Count的CSV,需要仅提取Count属性并构造单一属性的对象,或直接生成符合CSV格式的文本。
方法1:提取Count属性构造对象导出
$csvPath = "some.csv" $lineCount = "linecount.csv" # 统计行数并封装为仅含Count属性的对象 $countObj = [PSCustomObject]@{ Count = (Import-Csv $csvPath | Select-Object -Skip 1 | Measure-Object).Count } $countObj | Export-CSV $lineCount -NoTypeInformation
方法2:直接生成CSV文本写入文件
如果不需要通过对象导出,可直接拼接CSV格式文本写入,大文件场景下效率更高:
$csvPath = "some.csv" $lineCount = "linecount.csv" $rowCount = (Import-Csv $csvPath | Select-Object -Skip 1 | Measure-Object).Count # 直接写入目标CSV格式内容 @" "Count" "$rowCount" "@ | Out-File $lineCount -Encoding utf8
补充说明
Select-Object -Skip 1用于跳过CSV表头行,若需统计包含表头的总行数,移除该参数即可。- 方法2省略了对象转换和
Export-CSV的额外处理,性能更优。
内容的提问来源于stack exchange,提问作者noobCoder
相关产品推荐
相关产品推荐

