这是我第一次使用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)的最底部添加一个新行并保存
答案 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
}