重複してるデータを探してみよう!~Linuxコマンド編~

重複してるデータを探してみよう_Linuxコマンド編

映画「シン・ゴジラ」が最高すぎて庵野監督は天才なんだなと今更ながら思いました。りんです。
ほんとはここの挨拶文で真田丸の話でもしようかと思っていたのですが、「シン・ゴジラ」がすごすぎて、すごすぎて…「シン・ゴジラ」の話になってしまいました。「シン・ゴジラ」すごい。

今回は前回に引き続き、重複しているデータの探し方をご紹介します。
ちなみに前回はExcel編でした。

準備

前回同様、デモデータを用意します。


$ vi checkdata.txt

ファイル名は何でも構いませんが新規データにしましょう。
今回はcheckdata.txtにしておきます。

2830
3879
1492
17277
626
2876
30403
23817
2830
10543
7318
2876
16581
1492
4119
17277
3076
1517
27682
18970
10571
7976
9281
17277
30403
73183
23817
2830
10543
7318
2876
16581
1492
4119
17277
3076
1517
27682
18970
10571
7976
9281
17277
30403
7318

↑のデータを張り付けて、保存!

コマンド(とオプション)紹介

今回使うコマンド(とオプション)はこちらになります。

sort
(コマンド)行を並び替える
uniq
(コマンド)ソート済みのファイルから重複した行を削除する
-d
(オプション)重複行を表示する

これらを組み合わせて、実際に重複データの抽出を行ってみましょう!

実際に使ってみた

こんな風にコマンドを書いて実行してあげます。


$ sort checkdata.txt | uniq -d
1492
17277
2830
2876
30403
7318
$

やったー!重複してるデータがわかったぞ~!
でも、この抽出されたデータって何個ずつ被ってるのかな?
2個ずつ?それとも同じデータが3個あったりするのかな?
あと、重複したデータを取り除いた一覧をテキストに書き出したいな!

なんて、こともできるんです。コマンド操作ならね

応用編

同じ行が何個あるのか確認するにはこんな風に書いて実行します。


$ sort checkdata.txt | uniq -c
      1 10543
      1 10571
      2 1492
      1 1517
      1 16581
      3 17277
      1 18970
      1 23817
      1 27682
      2 2830
      2 2876
      2 30403
      1 3076
      1 3879
      1 4119
      1 626
      2 7318
      1 7976
      1 9281
$

ぅゎ、見にくい。
デモデータの左側についてる数字が、同じ行がいくつあるかを示しているんですがバラバラで非常に確認しにくい。なので、先ほど実行したコマンドに少しだけ付け足しします。


$ sort checkdata.txt | uniq -c | sort -r
      3 17277
      2 7318
      2 30403
      2 2876
      2 2830
      2 1492
      1 9281
      1 7976
      1 626
      1 4119
      1 3879
      1 3076
      1 27682
      1 23817
      1 18970
      1 16581
      1 1517
      1 10571
      1 10543
$

左側の数字が降順になりました!見やすい!(さっきよりは)
ちなみに昇順にしたい場合はオプションの「-r」を外せばOKです。

お次は、重複したデータを取り除いた一覧をテキストに書き出してみます。
まずは以下のコマンドを流して、一覧を表示してみましょう。


$ sort checkdata.txt | uniq
10543
10571
1492
1517
16581
17277
18970
23817
27682
2830
2876
30403
3076
3879
4119
626
7318
7976
9281
$

重複データが取り除かれた一覧ができました。
これをファイル(テキスト)に書き出します。


$ sort checkdata.txt | uniq > result.txt

result.txtがちゃんと作成されているか確認してみましょう。


$ ls -l
-rw-rw-r--  1 user group  140 2016-09-17 18:45 checkdata.txt
-rw-rw-r--  1 user group  102 2016-09-22 12:42 result.txt
$

できてますね。
それでは中身を見てみましょう。


$ cat result.txt
10543
10571
1492
1517
16581
17277
18970
23817
27682
2830
2876
30403
3076
3879
4119
626
7318
7976
9281
$

さっき表示された一覧と同じだー!
ってことで、ちゃんとできてましたね。

参考ページ

今回、記事を書くにあたってこちらのページを参考にさせていただきました。
【 sort 】 行を並び替える:ITpro
【 uniq 】 ソート済みのファイルから重複した行を削除する:ITpro
いつもお世話になってるITproさんのLinuxコマンド集です。

おわりに

2回に分けてお送りした重複データの探し方ですが、いかがでしたか?
Linuxコマンドは奥が深いので触る機会がありましたらいろいろ試してみてください。きっとハマりますよ~
それじゃあ、またね~~(^▽^)ノ

このエントリーをはてなブックマークに追加

りんが最近書いた記事

WRITERS POSTS もっと見る

他にもこんな記事が読まれています!

  • WEB
  • マーケティング
  • サーバー・ネットワーク
  • ライフスタイル
  • お知らせ