4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Link-UAdvent Calendar 2020

Day 8

bash を使った集合演算 (set operation)

Last updated at Posted at 2020-12-07

 pinfo コマンド素敵だなぁと思いつつ、info coreutils を読んだ時に知った話。つまり、これ coreutils のマニュアルの 8.3.6 の話。

集合演算

集合 要素
A seq 1 3 (1 2 3)
B seq 3 5 (3 4 5)

和集合

-u オプションの有無で重複の有無を調整できる。

$ sort -u -n  <(seq 1 3) <(seq 3 5)
1
2
3
4
5

積集合

要素の重複ありで和集合を取った後で、重複がある行だけ出力する。

$ sort -n <(seq 1 3) <(seq 3 5) | uniq -d
3

A に含まれない B の要素

予め A の要素を2回出現させることで、B だけの要素が1回しか出現しないようにしている。

$ sort -n <(seq 1 3) <(seq 1 3) <(seq 3 5) | uniq -u
4
5

集合Aが集合Bの要素を全て含有する場合に限り、差集合 (A - B) として定義できる(はず)。

集合の XOR

重複する要素は2回出現するので、それを取り除いて表示しているだけ。

$ sort -n  <(seq 1 3) <(seq 3 5) | uniq -u
1
2
4
5

これが何の役に立つのか?

 分からない。そもそも趣味で勉強した時に偶々知っただけの話なので。

 一応、業務では以下の用途で使ったことがある。

  • 未使用のIPアドレス一覧を、IPアドレス一覧から取得する
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?