PowerShell(cutコマンド代替)


『ごめん、愛してる』
最終回まで見たわけじゃないのに、CMの映像に宇多田ヒカルが流れただけで泣けてきます。
一話の韓国のシーンは良かったです。キンパ食べたくなりました。

マフィアにも切られ、母親からも切られている主人公、長瀬かっこいいです。

いろいろ切られてるということで、PowerShellでcutコマンドと似たようなことができないか確認してみます。

実験用のデータを生成します。タブ区切りフィールド3列、10レコードのデータです。

PS C:\Users\takk\aaa> $data=1..10 | %{"$_`t"+$(random)+"`tAAAA"}
PS C:\Users\takk\aaa> $data
1       1578837591      AAAA
2       222539531       AAAA
3       1974766125      AAAA
4       475015556       AAAA
5       647225503       AAAA
6       1860466963      AAAA
7       476117047       AAAA
8       1962103142      AAAA
9       1377184796      AAAA
10      1308106584      AAAA
PS C:\Users\takk\aaa>

まずは、cut -f、タブ区切りのフィールド抽出から。
以下のようにSplitを使って、文字列を分割して使うだけです。

PS C:\Users\takk\aaa> $arr="aaa,bbb,ccc".Split(",")
PS C:\Users\takk\aaa> $arr[1]
bbb
PS C:\Users\takk\aaa>

ではSplitを使って、実験データの1列目、3列目のみを抽出してみます。

PS C:\Users\takk\aaa> $data | %{$a,$b,$c=$_.Split("`t"); "$a`t$c"}
1       AAAA
2       AAAA
3       AAAA
4       AAAA
5       AAAA
6       AAAA
7       AAAA
8       AAAA
9       AAAA
10      AAAA
PS C:\Users\takk\aaa>

2列目の乱数値の和を計算してみます。

PS C:\Users\takk\aaa> $data | %{$sum=0}{$a,$b,$c=$_.Split("`t");$sum=$sum+$b}{$sum}
11882362838
PS C:\Users\takk\aaa>

cut -bはバイト位置を指定して抽出ができますが、これをPowerShellで実現するためには、StringをChar[]でキャストすれば、配列で指定できるので扱いやすくなります。

PS C:\Users\takk\aaa> $arr="HELLO"
PS C:\Users\takk\aaa> $c=[char[]]$arr
PS C:\Users\takk\aaa> $c[2]
L
PS C:\Users\takk\aaa>

まあ、cut -bを使うときは、範囲で指定すると思いますから、Substring使った方が早そうです。

PS C:\Users\takk\aaa> $data | % {$_.substring(0,4)}
1       15
2       22
3       19
4       47
5       64
6       18
7       47
8       19
9       13
10      1
PS C:\Users\takk\aaa>

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA