powershell - 如何从 powershell 中的 .txt 文件中获取一行的总和?
问题描述
所以,我有一个像这样的文本文件“numbers.txt”:
2 3 4 5
5 6
6 7 7
6 88 9 67 4
65 76 979 8
6 88 5 4 23
我的问题是,我怎样才能得到每行的总和?我试图做的事情:
$data=Get-Content -Delimiter " " numbers.txt
$data | % {
$sum=0
foreach($num in $_) {
$sum+=$num
}
Write-Host $sum
}
但它会返回奇怪的数字。我不知道如何分隔每一行中的不同数字并得到它们的总和。
解决方案
这是一个使用 LINQ 的快速简洁的 PSv4+ 解决方案:
(Get-Content numbers.txt).ForEach({
[Linq.Enumerable]::Sum([int[]] ($_ -split ' '))
})
(Get-Content numbers.txt)
将输入文件的行作为字符串数组返回。.ForEach({ ... }
{ ...}
)为每个输入行执行一个脚本块 ( )。[Linq.Enumerable]::Sum(...)
对数字数组(可枚举)的元素求和。$_ -split ' '
将手头的输入行 ($_
) 通过空格拆分为 (字符串) 标记,并将结果转换为整数数组([int[]]
)。
这是一个更慢的解决方案,更接近您的尝试(也适用于 PSv3):
Get-Content numbers.txt | ForEach-Object { # Process each line.
$sum = 0 # initialize the sum (implicitly of type [int])
foreach ($num in $_ -split ' ') { # Process all tokens on the line.
# Note: Because $sum is [int]-typed, adding the *string* token at
# hand implicitly converts it to [int].
$sum += $num
}
$sum # Output the sum - do NOT use Write-Host to output DATA
}
两种解决方案都产生以下结果:
14 # 2 + 3 + 4 + 5
11 # 5 + 6
20 # ...
174
1128
126
至于你尝试了什么:
Get-Content -Delimiter " " numbers.txt
这会将您的整个文件拆分为单个数字字符串数组,而忽略行边界。
相反,您必须Get-Content
按原样使用,以便逐行处理文件,然后将每一行拆分为以空格分隔的标记进行汇总。
推荐阅读
- python - 从 s3 Bucket 下载文件到 EC2 根路径
- node.js - Solidity:ParserError:预期的编译指示、导入指令或合同/接口/库定义
- android - RecyclerView 不显示项目
- mysql - 为什么 sqlite .dump 加密数据到 x'2384934..' 而不是原始数据?
- javascript - 画布到图像 base64 编码的 url 不显示图像
- android - 测试 ION 驱动程序时,libion 中的 DMAReadCached 失败
- android - 为什么 Chronometer 类中的 isTheFinalCountDown 方法会打开 YouTube 视频?
- javascript - table row not append to division table through javascript
- asp.net-mvc - Sending large data to wcf service returns me "504 (Gateway Time-out) error"
- c# - EF Core: How to ensure only one thread is updating a DB having async calls?