重複した行を削除するにはどうすればよいですか?
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 -c と uniq を組み合わせる代わりに wc を使って、ユニークな行とその出現回数を表示してください。
