重複した行を取り除くにはどうしますか?
しばしば sort と一緒に使われるコマンドに uniq があります。
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 が非常に大きなファイルで動作するよう設計されているためです。
隣接していない重複行を取り除くには、
ファイル全体(少なくとも、これまでに現れたすべてのユニークな行)を
メモリに保持する必要があります。
隣接する重複だけを取り除くことで、
直近のユニークな1行だけをメモリに保持すればよくなります。
この演習はコースの一部です
Shell 入門
演習の手順
次の処理を行うパイプラインを書いてください:
seasonal/winter.csvから2列目を取得する。- 出力から "Tooth" という単語を取り除き、歯の名前だけを表示する。
- 同じ歯の名前が隣り合うように出力を並べ替える。
- 各歯の名前を一度だけ表示し、その出現回数も一緒に表示する。
パイプラインの最初の部分は前の演習と同じです:
cut -d , -f 2 seasonal/winter.csv | grep -v Tooth
ここに sort コマンドを続け、uniq -c を使って、各ユニークな行を出現回数付きで表示してください。uniq と wc を組み合わせる代わりに使います。
