OS Windows Windows PowerShell シェル

Windows Power Shell : sed の様にファイルから指定した行番号だけ抜き出す

2011年1月29日

以下の様なリストがあったとする。

list.txt

Yamada Taro,Tokyo,18
Yamada Jiro,Tokyo,16
Sasaki Ichiro,Chiba,22
Suzuki Saburo,Hokkaido,40
Yamaguchi Shiro,Niigata,39

list.txt の4行目だけを抜き出す

  • UNIX/Linuxの場合

root:\temp> cat list.txt | sed -e '4!d'
Suzuki Saburo,Hokkaido,40
root:\temp>

  • Power Shell でやる場合

PS C:\temp> (Get-Content .\list.txt)[3]
Suzuki Saburo,Hokkaido,40
PS C:\temp>

list.txt の 3行目~5行目までを抜き出す場合

  • Linux / UNIX の場合

sed –n '3,5p' list.txt

もしくは、以下でもできた。

sed -e '3,5!d' list.txt

  • Windows Power Shell の場合

配列として扱われるので、3~5行目は、要素番号の2~4になる。

PS C:\temp> (Get-Content .\list.txt)[2..4]
Sasaki Ichiro,Chiba,22
Suzuki Saburo,Hokkaido,40
Yamaguchi Shiro,Niigata,39
PS C:\temp>

list.txt の1行目と4行目だけを抜き出す場合

  • Linux/UNIXの場合

一つのコマンドにはできず、基本的に以下を行を変えて繰り返すしか無い?

root:\temp> cat list.txt | sed -e '4!d'
Suzuki Saburo,Hokkaido,40
root:\temp>

  • Windows Power Shell の場合

PS C:\temp> (Get-Content .\list.txt)[0,3]
Yamada Taro,Tokyo,18
Suzuki Saburo,Hokkaido,40
PS C:\temp>

注意:

この記事を書いている 2011年時点で、正規表現などのファイル処理に関しては、Linux/Unix で実績のある sed に一日の長があるように思える。
230MByte のテキストファイルのある部分の行のブロックを抜き出す処理をした所、Linux上で sed を使用した場合、数秒で処理が終わったが、Power Shell では、数分待たされた上、メモリのException が出た。

また、幾つか Windows 用の sed ツールを試してみたが、対象ファイルによっては上手く動いたり、動かなかったりして(日本語文字の問題?)、解決策を見つけられていない。

created by Rinker
¥4,400 (2020/08/06 22:32:30時点 Amazon調べ-詳細)

-OS, Windows, Windows PowerShell, シェル

Copyright© エンジニアの何でもメモ帳 , 2020 All Rights Reserved.