tips chips

日々の作業で出てきた技術メモの切れ端を置いておくページ

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

これね