Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如果只有前6个字符不同,如何计算行数?_Arrays_Powershell_Count_Lines - Fatal编程技术网

Arrays 如果只有前6个字符不同,如何计算行数?

Arrays 如果只有前6个字符不同,如何计算行数?,arrays,powershell,count,lines,Arrays,Powershell,Count,Lines,我有这样一个txt文件: ksakks ...... ...... ksakks ...... ...... ksakks ...... ...... ksakks ...... ...... ksakks ...... ...... ksakks ...... ...... bccscd ...... ...... bccscd ...... ...... bccscd ...... ...... bccscd ...... ...... ... 我得数一数。例如:ksakks有6行,bcc

我有这样一个txt文件:

ksakks ...... ......
ksakks ...... ......
ksakks ...... ......
ksakks ...... ......
ksakks ...... ......
ksakks ...... ......
bccscd ...... ......
bccscd ...... ......
bccscd ...... ......
bccscd ...... ......
...
我得数一数。例如:
ksakks
有6行,
bccscd
只有4行。如果它们中的一些少于3,那么我必须保存它们的“名称”,如果有更多,那么我必须将它们的“名称”保存在数组中


我该怎么做?

您可以使用
选择Sting
提取文本,然后使用
组对象
进行计数。大概是这样的:

(Select-String .\yourfile.txt -Pattern '^.{6}' ).Matches | Select -ExpandProperty value | Group-Object | Select Name, Count

您可以使用
Select Sting
提取文本,然后使用
Group对象
进行计数。大概是这样的:

(Select-String .\yourfile.txt -Pattern '^.{6}' ).Matches | Select -ExpandProperty value | Group-Object | Select Name, Count

要获取计数,请使用以下命令:

Get-Content "E:\Source_Test\file.txt"|Group-Object {$PSItem.Substring(0,6)} -NoElement
我用你的数据创建了一个示例文件,它很好地实现了。以下是供您参考的屏幕截图

输出:

文本文件


希望它有助于获得计数,请使用以下命令:

Get-Content "E:\Source_Test\file.txt"|Group-Object {$PSItem.Substring(0,6)} -NoElement
我用你的数据创建了一个示例文件,它很好地实现了。以下是供您参考的屏幕截图

输出:

文本文件

希望它有帮助

试试这个

$result = get-content C:\temp\result.txt | 
                             group { $_.substring(0, 6)} | 
                                                where Count -lt 3 | 
                                                              select Name
如果你的文件总是有空格分隔符,你也可以这样做

$result = import-csv "C:\temp\result.txt"  -Delimiter " " -Header h1 | group h1 | where Count -lt 3 | select Name
试试这个

$result = get-content C:\temp\result.txt | 
                             group { $_.substring(0, 6)} | 
                                                where Count -lt 3 | 
                                                              select Name
如果你的文件总是有空格分隔符,你也可以这样做

$result = import-csv "C:\temp\result.txt"  -Delimiter " " -Header h1 | group h1 | where Count -lt 3 | select Name

这有助于格式化文本,而且目标也不完全清楚。您尝试过什么,但什么不起作用?
gc file.txt | group{$\子字符串(0,6)}-NoElement |?Count-lt 3 |%Name
有关于格式化文本的帮助,而且目标也不完全清楚。您尝试过什么,但什么不起作用?
gc file.txt | group{$\子字符串(0,6)}-NoElement |?计数-lt 3 |%Name
谢谢!这是我的错,我忘记了一件事:在第一个参数中,用户必须键入一个值(如:“线性代数”),并且只有包含“线性代数”的行必须计数,然后我必须使用您的代码。您的代码正在工作,但它会计算所有txt文件,而不仅仅是包含第一个参数的文件。很抱歉,我没有提到这一点,我想如果你能帮我一点忙,我可以做到,但我不能重写你的建议。@GiuseppedTeamer在分组之前添加一个过滤器,只选择匹配的行。请自己做些腿部运动。所以这不是一个人们为你的问题提供全包解决方案的地方。谢谢!这是我的错,我忘记了一件事:在第一个参数中,用户必须键入一个值(如:“线性代数”),并且只有包含“线性代数”的行必须计数,然后我必须使用您的代码。您的代码正在工作,但它会计算所有txt文件,而不仅仅是包含第一个参数的文件。很抱歉,我没有提到这一点,我想如果你能帮我一点忙,我可以做到,但我不能重写你的建议。@GiuseppedTeamer在分组之前添加一个过滤器,只选择匹配的行。请你自己做一些腿部工作。因此,这不是一个人们为你的问题提供全包解决方案的地方。