1. 学ぶ
  2. /
  3. コース
  4. /
  5. Shell 入門

Connected

演習

重複した行を取り除くにはどうしますか?

しばしば 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行だけをメモリに保持すればよくなります。

指示

100 XP

次の処理を行うパイプラインを書いてください:

  • seasonal/winter.csv から2列目を取得する。
  • 出力から "Tooth" という単語を取り除き、歯の名前だけを表示する。
  • 同じ歯の名前が隣り合うように出力を並べ替える。
  • 各歯の名前を一度だけ表示し、その出現回数も一緒に表示する。

パイプラインの最初の部分は前の演習と同じです:

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

ここに sort コマンドを続け、uniq -c を使って、各ユニークな行を出現回数付きで表示してください。uniq と wc を組み合わせる代わりに使います。