1. Learn
  2. /
  3. Cursuri
  4. /
  5. Introducere în Shell

Connected

exercițiu

Cum pot elimina liniile duplicate?

O altă comandă folosită frecvent împreună cu sort este uniq, al cărei rol este să elimine liniile duplicate. Mai exact, eliminează liniile duplicate adiacente. Dacă un fișier conține:

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

atunci uniq va produce:

2017-07-03
2017-08-03

dar dacă fișierul conține:

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

atunci uniq va afișa toate cele patru linii. Motivul este că uniq a fost conceput pentru a lucra cu fișiere foarte mari. Pentru a elimina liniile care nu sunt adiacente, ar fi nevoie să păstreze întregul fișier în memorie (sau cel puțin toate liniile unice întâlnite până în acel moment). Eliminând doar duplicatele adiacente, este suficient să păstreze în memorie doar cea mai recentă linie unică.

Instrucțiuni

100 XP

Scrie un pipeline care să:

  • extragă a doua coloană din seasonal/winter.csv,
  • elimine cuvântul "Tooth" din rezultat, astfel încât să fie afișate doar numele dinților,
  • sorteze rezultatul, astfel încât toate aparițiile unui anumit nume să fie adiacente; și
  • afișeze fiecare nume o singură dată, împreună cu numărul de apariții.

Începutul pipeline-ului tău este același ca în exercițiul anterior:

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

Extinde-l cu o comandă sort, apoi folosește uniq -c pentru a afișa liniile unice împreună cu numărul de apariții, în loc să folosești uniq și wc.