tech.guitarrapc.cóm

Technical updates

PowerShellのパイプライン遊び

Hey, Script Guy! Blogにある記事があります。

https://blogs.technet.com/b/heyscriptingguy/archive/2014/09/22/fun-formatting-ones-part-1-the-task.aspx

簡単にいうと、こういうことがPowerShellのワンライナーでできるよー。というものです。

Doug Finke (@dfinke) September 6, 2014

どうせなので、画像のようにやってみましょう。

なにが違うの

例はこのようなワンライナーです。

1..8 | ForEach {$n="1" * $_;"{0,9} x {0,9} = {1}" -f $n, &#40"$n * $n" |iex&#41};

実際はこのように出力されます。

        1 x         1 = 1
       11 x        11 = 121
      111 x       111 = 12321
     1111 x      1111 = 1234321
    11111 x     11111 = 123454321
   111111 x    111111 = 12345654321
  1111111 x   1111111 = 1234567654321
 11111111 x  11111111 = 123456787654321

image

赤くなくてさみしいのです。

わんらいなー(棒)

い、いちおうパイプラインで繋ぎ続けてるんだからねっ!

https://gist.github.com/guitarrapc/b722303a4752f54bb9e3

画像通りですね。

image

色の反転だって簡単ですね。

image

まとめ

下手に赤くするとこういうことになります。

こわい。*1

1..8 `
| % {
    $n="1" * $_;
    Write-Host &#40"{0,9} x {0,9} = " -f $n&#41 -n;
    $x=&#40"$n * $n" | iex)
    $x `
    | %{
        $n=$_;
        $l=$_ -split "";
        [int]$z=&#40$l.length-1&#41/2;
        $l `
        | where {$_} `
        | %{$i=1}{
            if&#40$l.length -2 -eq 1&#41
            {
                Write-Host $_ -Fo Red
            }
            elseif&#40$i -eq $l.length - 2&#41
            {
                Write-Host $_
            }
            elseif&#40$i -eq $z&#41
            {
                Write-Host $_ -n -Fo Red
            }
            elseif&#40$i -lt $z&#41
            {
                Write-Host $_ -n
            }
            elseif&#40$i -gt $z&#41
            {
                Write-Host $_ -n
            };
            $i++
        }
    }
}

*1:PowerShellで頭の体操