始める無料で始める

重複した行を削除するにはどうすればよいですか?

sort とよく一緒に使われるもう1つのコマンドが uniq です。 このコマンドは、重複した行を削除する役割を持ちます。 より正確には、隣接する重複行を削除します。 例えば、あるファイルに次の内容が含まれているとします。

2017-07-03
2017-07-03
2017-08-03
2017-08-03

この場合、uniq は次のように出力します。

2017-07-03
2017-08-03

しかし、ファイルの内容が次のようになっている場合、

2017-07-03
2017-08-03
2017-07-03
2017-08-03

uniq は4行すべてを出力します。 これは、uniq が非常に大きなファイルでも扱えるように設計されているためです。 隣接していない重複行までまとめて削除しようとすると、 ファイル全体(少なくとも、それまでに出現したすべてのユニークな行)を メモリ上に保持しておく必要があります。 隣接する重複だけを削除する仕組みにすることで、 直前のユニークな行だけをメモリに保持すればよくなるのです。

この演習はコースの一部です

Shell 入門

コースを見る

演習の手順

次の処理を行うパイプラインを作成してください。

  • seasonal/winter.csv の2列目を取得する
  • 出力から "Tooth" という単語を取り除き、歯の名前だけが表示されるようにする
  • 同じ歯の名前がすべて隣接するように出力を並べ替える
  • 各歯の名前を1回ずつ、それぞれの出現回数とともに表示する

パイプラインの冒頭部分は、前の演習と同じです。

cut -d , -f 2 seasonal/winter.csv | grep -v Tooth

これに sort コマンドを追加し、uniq -cuniq を組み合わせる代わりに wc を使って、ユニークな行とその出現回数を表示してください。

実践的なインタラクティブ演習

理論を実践に変える、インタラクティブな演習のひとつをお試しください

演習を開始する