String Powershell:计算每一个“事件”的发生次数;1“;txt文件中的字符串

String Powershell:计算每一个“事件”的发生次数;1“;txt文件中的字符串,string,windows,powershell,foreach,count,String,Windows,Powershell,Foreach,Count,我们有一个学生及其笔记的文本文件,我们必须计算所有学生有多少个“1”笔记。 我的代码显示有多少行包含“1”注释,但当它找到“1”时,它会跳到下一行。 你能帮我吗 例如: 哈克贝利·费恩211 汤姆·索耶3 2 1 4 1 应该是5,但得到2 $ones = 0 $file= Get-Content notes.txt foreach ($i in $file) { if ($i.Split(' ') -eq 1){ $ones ++ } } $ones

我们有一个学生及其笔记的文本文件,我们必须计算所有学生有多少个“1”笔记。 我的代码显示有多少行包含“1”注释,但当它找到“1”时,它会跳到下一行。 你能帮我吗

例如:

哈克贝利·费恩211 汤姆·索耶3 2 1 4 1 应该是5,但得到2

$ones = 0

$file= Get-Content notes.txt

foreach ($i in $file) {
    if ($i.Split(' ') -eq 1){
        $ones ++
    }
}

$ones

如果输入文件中的所有
1
标记都是空格分隔的,如示例内容所示,请尝试:

# With your sample file content, $ones will receive the number 5.
$ones = (-split (Get-Content -Raw notes.txt) -eq '1').Count
上面使用了cmdlet的一元形式和
-Raw
开关,该开关将文件作为一个多行字符串加载到内存中

也就是说,上面的命令将整个文件拆分为空格分隔的标记,统计所有行中等于
'1'
的所有标记

如果您想计算每行
'1'
令牌的数量,请使用以下方法:

# With your sample file content, $ones will receive the following *array*:
#    3, 2
$ones = Get-Content notes.txt | ForEach-Object { ((-split $_) -eq '1').Count }

至于你所尝试的

if($i.Split(“”)-eq 1)


虽然
$i.Split(“”)
返回存储在
$i
中的单个输入行中包含的所有(单个)空格分隔的令牌,但如果
语句只导致一次调用关联的
{…},则在
的条件表达式中使用该表达式
阻塞,因此只增加
$one
1
,而不是手头行中
1
标记的数量。

如果输入文件中所有
1
标记都是空格分隔的,如示例内容所示,请尝试:

# With your sample file content, $ones will receive the number 5.
$ones = (-split (Get-Content -Raw notes.txt) -eq '1').Count
上面使用了cmdlet的一元形式和
-Raw
开关,该开关将文件作为一个多行字符串加载到内存中

也就是说,上面的命令将整个文件拆分为空格分隔的标记,统计所有行中等于
'1'
的所有标记

如果您想计算每行
'1'
令牌的数量,请使用以下方法:

# With your sample file content, $ones will receive the following *array*:
#    3, 2
$ones = Get-Content notes.txt | ForEach-Object { ((-split $_) -eq '1').Count }

至于你所尝试的

if($i.Split(“”)-eq 1)

虽然
$i.Split(“”)
返回存储在
$i
中的单个输入行中包含的所有(单个)空格分隔的令牌,但如果
语句只导致一次调用关联的
{…},则在
的条件表达式中使用该表达式
阻塞,因此只增加
$one
1
,而不是手头行中
1
令牌的数量。

已解决

谢谢你,mklement0

我不明白为什么,但它是这样工作的:

$ones = 0

$file= Get-Content notes.txt

foreach ($i in $file) {
    $ones=(-split ($i) -eq '1').Count
    }
}

$ones
解决了

谢谢你,mklement0

我不明白为什么,但它是这样工作的:

$ones = 0

$file= Get-Content notes.txt

foreach ($i in $file) {
    $ones=(-split ($i) -eq '1').Count
    }
}

$ones

我现在明白你想做什么了:计算每行
1
令牌的数量。这在你的问题中并不清楚,我的解释是,你想计算整个文件中的
1
s。答案的编写方式意味着
$one
只包含循环后最后一行的计数,这可能不是目的。我已经更新了我的答案,展示了一种使用单个管道收集数组中所有每行计数的方法。我现在明白了您试图做的事情:计算每行的
1
令牌数。这在你的问题中并不清楚,我的解释是,你想计算整个文件中的
1
s。答案的编写方式意味着
$one
只包含循环后最后一行的计数,这可能不是目的。我更新了我的答案,展示了一种使用单个管道收集阵列中所有每行计数的方法。