シェルスクリプトでデータを絞り込む方法いろいろ(grep、sed、awk)
はじめに
シェルスクリプトやコンソールでデータを絞り込むための方法をいくつか紹介します。
基本どれか一つを使えればいいと思いますが、例えば特定の今度がない!( grep
コマンドを消してしまった! )なんてときに使えるかもしれません。(そんなケースあるのか?)
検証環境
$ uname -moi
x86_64 MacBookPro11,4 Darwin
$ bash -version
GNU bash, バージョン 5.0.2(1)-release (x86_64-apple-darwin18.2.0)
準備
検証用のデータ(csv)を作成。
$ cat <<'EOF' >> personal_infomation.csv
連番,氏名,氏名(カタカナ),性別,電話番号,生年月日
1,浜崎陽治,ハマザキヨウジ,男,0238930217,1974/11/03
2,奥山隆雄,オクヤマタカオ,男,0888070241,1997/08/04
3,船越瑠奈,フナコシルナ,女,0986044637,1966/04/16
4,玉置忠治,タマキタダハル,男,0779869154,1995/07/19
5,出口美香,デクチミカ,女,0289679894,1991/10/18
6,西本良之,ニシモトヨシユキ,男,0855699116,1988/03/29
7,湯川麗奈,ユカワレナ,女,0997770517,1996/03/05
8,荻野莉沙,オギノリサ,女,073800935,1987/06/20
9,海野博明,ウミノヒロアキ,男,0888070499,1998/05/23
10,高崎淳一,タカサキジュンイチ,男,0559462109,1982/05/10
EOF
grep
を使った絞り込み
最もよく使われる方法。
この方法を知っていたら十分ではある。
絞り込み結果を必要に応じてバイプで次のコマンドに渡してやれば、更に可能できる。
$ grep 女 personal_infomation.csv
3,船越瑠奈,フナコシルナ,女,0986044637,1966/04/16
5,出口美香,デクチミカ,女,0289679894,1991/10/18
7,湯川麗奈,ユカワレナ,女,0997770517,1996/03/05
8,荻野莉沙,オギノリサ,女,073800935,1987/06/20
sed
を使った絞り込み
sed
でも絞り込みができる。sed
も grep
も、後述する awk
もいずれも ed
という過去にあったライン志向のエディタから派生している。grep
は基本動作としてフィルタ結果を 出力しない が、 sed
は基本動作としてフィルタ結果を 常に出力する 。
-n
というオプションを指定し、基本動作を grep
のように 出力しない ように設定した上で、条件に合致したもののみを sed
の p
コマンドで出力させれば良い。
( p
コマンドは該当行を出力させるためのsed 組み込み
コマンド。 )
$ sed -n '/女/p' personal_infomation.csv
3,船越瑠奈,フナコシルナ,女,0986044637,1966/04/16
5,出口美香,デクチミカ,女,0289679894,1991/10/18
7,湯川麗奈,ユカワレナ,女,0997770517,1996/03/05
8,荻野莉沙,オギノリサ,女,073800935,1987/06/20
awk
を使った絞り込み
先述したとおり、 grep
、 sed
、 awk
は兄弟なので、 awk
でも絞り込みが可能。sed
と awk
は似ていて、/.../
のように "/"で囲んだ部分が絞り込み条件となる 。
$ awk '/女/ { print $0 }' personal_infomation.csv
3,船越瑠奈,フナコシルナ,女,0986044637,1966/04/16
5,出口美香,デクチミカ,女,0289679894,1991/10/18
7,湯川麗奈,ユカワレナ,女,0997770517,1996/03/05
8,荻野莉沙,オギノリサ,女,073800935,1987/06/20
参考
sed
、 awk
の絞り込みは単体で使うことはあまりないかもしれませんが、絞り込んで置換するようなときに便利。
ディスカッション
コメント一覧
まだ、コメントがありません