2016年1月19日火曜日

Windows標準コマンドでheadやtailする

残念ながらコマンドプロンプトでは簡単に実現できないが、PowerShellを使えばできる、という小ネタ。コマンドは以下の通り。

・head
Get-Content "<ログファイル名>" | Select-Object -first 100

・tail
Get-Content "<ログファイル名>" | Select-Object -last 100

中間を取り出したい場合は、2通り方法がある。例えば、以下のようなテキストファイル(test.txt)があるとして、3行目~5行目を取り出したい場合のコマンドを考える。

-------例ここから
1 a
2 b
3 c
4 d
5 e
6 f
7 g
-------例ここまで

①firstとlastを組み合わせる

Get-Content "test.txt" | Select-Object -first 5 | Select-Object -last 3

-------結果ここから
3 c
4 d
5 e
-------結果ここまで

②skipを使う

Get-Content "test.txt" | Select-Object -skip 2 -first 3

※以下のようにオプションの順番を変えても結果は同じ。どうやらskipはfirstよりも先に処理される模様
Get-Content "test.txt" | Select-Object -first 3 -skip 2

-------結果ここから
3 c
4 d
5 e
-------結果ここまで

感覚的には①の方法が、実際に抜き出したい行の番号と、オプションの指定が一致するのでわかりやすいと思う。処理的にはおそらくパイプが1回で済む②が速いと思われる(未検証)。

1 件のコメント:

  1. 当時のバージョンではどうだったかわからないですが、最近のだと Get-Contentの -TotalCount と -Tail でできますね。中間を取り出す場合はSelect-Objectも併用

    返信削除

人気の投稿