Powershell:计算行数,编辑和保存

时间:2014-03-18 16:25:55

标签: powershell

这是我第一次使用powershell,我的目标是创建一个ps1脚本来计算csv文件中的行(或管道分隔),然后在最后广告一个新行。

到目前为止,我知道如何计算行数(不包括标题)

(Import-Csv C:\Users\xx\Documents\test.csv).count
27575 <--result

这是我创建的ps1文件脚本。 (不确定它是否有效)

#count lines
$fileLocation = "C:\Users\xx\Documents\test.csv"
$countRecords = (Import-Csv $fileLocation).count

这是文件的示例:

id|number
1|12345
2|123456
3|1234565
4|123456
5|123456

它应该如何看待

id|number
1|12345
2|123456
3|1234565
4|123456
5|123456
T|5

其中T是预告片记录,5是不包括标题的记录计数或行数。

总结一下,我需要计算记录(不包括标题)在总数(T | $ totalCount)的最底部添加一个新行并保存

2 个答案:

答案 0 :(得分:1)

你得到它,你只需要创建新行并将其附加到你的文件中。你可以尝试:

(Import-Csv C:\temp\t.csv -Delimiter '|').count | %{$a="T|$_";$a} | Add-Content C:\temp\t.csv

答案 1 :(得分:1)

由于您只想将记录计数附加到文件而不修改任何其他内容,我可能会这样做:

$csv = "C:\Users\xx\Documents\test.csv"

Select-String '^' $csv | % { $cnt = $_.LineNumber }
"T|$($cnt-1)" | Out-File $csv -Append

请注意,这会将总计追加到文件的最后一行。如果您的CSV不以尾随换行结束,您将获得此结果:

id|number
1|12345
2|123456
3|1234565
4|123456
5|123456T|5

而不是:

id|number
1|12345
2|123456
3|1234565
4|123456
5|123456
T|5

您可以通过将"T|$($cnt-1)"更改为"`r`nT|$($cnt-1)"来插入缺失的换行符,但是当CSV以尾随换行符结束时,您会得到虚假的空行。

更好的方法是检查换行符是否为换行符(ASCII字符10)并相应地修改附加的字符串:

if ( [IO.File]::ReadAllBytes($csv)[-1] -eq 10 ) {
  "T|$($cnt-1)" | Out-File $csv -Append
} else {
  "`r`nT|$($cnt-1)" | Out-File $csv -Append
}