打印序列中缺少的号码

时间:2018-10-16 19:45:30

标签: regex powershell sorting scripting range

我有一个名为test.txt的文件,其中有一个序列:

1
3
5
6
7

我想打印出丢失的数字,然后发现一个magic code可以完美完成:

gc test.txt |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}

或者这个:

gc test.txt | sort {[int]$_} |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}

但我想打印 ALL 数字:

  • 绿色列表中的数字
  • RED 中列表中缺少的数字

2 个答案:

答案 0 :(得分:4)

读取文件,从第一个数字开始,最后一个结束,并输出文件中没有的任何数字...

$TestFile = Get-Content Test.txt|Sort
[int]$TestFile[0]..[int]$TestFile[-1]|Where{$_ -notin $TestFile}

编辑:糟糕,您需要所有数字。这将需要切换,需要一会儿进行更新。

$TestFile = Get-Content Test.txt|Sort
Switch([int]$TestFile[0]..[int]$TestFile[-1]){
    {$_ -notin $TestFile}{Write-Host "$_" -Fore Red;Continue}
   default {Write-Host "$_" -Fore Green}
}

答案 1 :(得分:1)

只需将Write-Host -Fore red/green插入正确的位置:

gc test.txt | % {$i = 1}{while ($i -lt $_){write-host -Fore red $i;$i++};write-host -Fore green $i;$i++}

没有别名的情况相同

Get-Content .\test.txt | ForEach-Object {$i = 1}{
   while ($i -lt $_){
     Write-Host -ForegroundColor Red $i
     $i++
   }
   Write-Host -ForegroundColor Green $i
   $i++
 }

enter image description here