【问题标题】:Count the line # before blank line in PowerShell在PowerShell中计算空行之前的行号
【发布时间】:2014-10-31 19:10:19
【问题描述】:

如何获取空行之前的行数。例如:

这是一段 这是一段 这是一段 这是一段 这是一段 这是一段 这是一段

第一组应计为 3 行,第二组应计为 4 行。 我使用了Get-Content .\testing.txt | Measure-Object -line,它返回总行数,但这不是我想要的。

【问题讨论】:

    标签: powershell-3.0 powershell-ise


    【解决方案1】:

    Get-Content 返回一个数组,因此任何回车或换行都会丢失。假设没有空格,则以下返回 3. 如果它们不被视为字符,则相应地调整以修剪“空格”。 $a = Get-Content .\testing.txt ; [array]::IndexOf($a,'')

    编辑:以下循环内容并输出任何空行之前的行数。空行或包含任意数量空格的行被视为空白。要将空格视为非空行,请删除“.trimend”。

    $a = Get-Content C:\powershell\tmp.txt ; $i = 0;
    while( [array]::IndexOf($a.trimend(' '),'', $i) -gt 0)
    {
        $j = [array]::IndexOf($a.trimend(' '),'', $i); $j - $i; $i = $j + 1 ;   
    }  
    

    【讨论】:

    • 谢谢@Ottak。这可以得到第一组的总计数。但是如何获取第二组的总行数呢?
    • @JasonTang 查看我添加到原始答案的其他编辑。它适用于任何长度的文件。在包含连续空行集的 20 组文件上进行测试。
    • 谢谢!由于情况发生了变化,我使用了不同的方法,但是您的解决方案回答了我最初的问题。 :)
    【解决方案2】:

    这将逐步遍历文件的行以查找第一个空白。

    $lines = Get-Content C:\Dev\PS\3.txt
    for ($i = 0; $i -le $lines.Length; $i++) {
        if ($lines[$i].Length -eq 0) {
            break
        }
    }
    echo $i
    

    【讨论】:

    • 谢谢@JasonW。任何想法如何获得两组的总数?
    • 这两组是什么意思?在同一个文件中,所以您想在同一个文件的不同行中输出 3 和 4?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多