sed便利(でかいCSVを操作する編)
sedのコマンドは文法を覚えながら使うと覚えやすいと感じました
巨大なCSVを操作する機会があってsedを使った。M1 Max 64GB RAMのつよつよマシンでも普通にエディタで開いて操作したりするともっさりするがsedならサクサクである。すごい。
(CSVじゃなくても別に使えるテク)
ほとんど以下のサイトに書いてることだが、自分の理解を書いておく
sed コマンド | コマンドの使い方(Linux) | hydroculのメモ
http://hydrocul.github.io/wiki/commands/sed.html
user_id,name
1,Taro
2,Jiro
3,Saburo
みたいなヘッダー行CSVのうち、user_idが2のものだけを取り出したいみたいな時は
sed -n -E '1p; /^2,/p' sample.csv
のようにする。
-E
は拡張正規表現というのを使うためのオプションで(よくわかってない)、-n
はsedの命令の中で明示的に出力したものだけを出力するようにするオプション
1p; /^2,/p
という命令は 1p
という命令と /^2,/p
という命令に分けられる。それぞれ
1p
: 1とpに分けられて1行目をpという命令で出力している/^2,/p
:^2,
という正規表現とpという命令に分けられる。正規表現に一致した行を出力している。この正規表現は2,から始まる行という意味なので、結果として2行目がマッチする
これを処理すると1行目が出力され、そのあと2,から始まる行だけが出力されて期待する結果が得られる。
↑上記を理解したことでやっとこの間書いたファイルの行を抜き出すsedのコマンドの意味が理科できるようになった。
ファイルの先頭n行を抜き出したファイルを作る
大きなファイルの一部を抜き出すみたいなことをしたくなった時のスニペット
https://chips.mogam.in/p/9f1f6510-e879-4583-b590-be61039feedf
これね