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ă.
Acest exercițiu face parte din cursul
Introducere în Shell
Instrucțiuni pentru exercițiu
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.
Exercițiu interactiv practic
Transformă teoria în practică cu unul dintre exercițiile noastre interactive
Începe exercițiul