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

Powershell:计算行数、编辑和保存,powershell,Powershell,这是我第一次使用powershell,我的目标是创建一个ps1脚本,对csv文件(或管道分隔)中的行进行计数,然后在末尾添加新行 到目前为止,我知道如何获得行数(不包括页眉) 这是该文件的一个示例: 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为记录计数或行数,不包括标题

这是我第一次使用powershell,我的目标是创建一个ps1脚本,对csv文件(或管道分隔)中的行进行计数,然后在末尾添加新行

到目前为止,我知道如何获得行数(不包括页眉)

这是该文件的一个示例:

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)保存它

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

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

由于您只想在不修改任何其他内容的情况下将记录计数附加到文件中,我可能会执行以下操作:

$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
}

我是唯一一个一想到在27K行上进行导入csv就畏缩的人,只是为了得到行数吗?这是可行的,请您解释一下这个位是如何工作的
%{$a=“T |$\u”$a}
如何将计数分配给“$\u;$a”谢谢!%是
foreach对象
CmdLet的别名(此处$将只接收一个值->计数)
$a
将是我放回管道以附加到文件的新行。
id|number
1|12345
2|123456
3|1234565
4|123456
5|123456
T|5
if ( [IO.File]::ReadAllBytes($csv)[-1] -eq 10 ) {
  "T|$($cnt-1)" | Out-File $csv -Append
} else {
  "`r`nT|$($cnt-1)" | Out-File $csv -Append
}