staging.inyokaproject.org

sort und uniq - besimmte Spalte und letzes Auftreten

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

sappy

Anmeldungsdatum:
24. Januar 2012

Beiträge: 282

Hallo,

angenommen ich habe eine Datei mit dieser Struktur:

abcde           -5.1  2017-01-17 19:00:00
abcde           -8.1  2017-01-17 18:30:00
abcde           -9.9  2017-01-17 18:30:00
abcde           -5.3  2014-01-17 11:30:00
abcde           -2.1  2015-01-17 20:00:00
abcde           -5.1  2017-01-17 20:00:00
abcde           -9.8  2017-01-17 18:30:00
abcde            3.1  2017-02-17 15:00:00
abcde           -2.1  2017-01-16 20:00:00

Ich möchte die Datei sicher nach der 3./4. Spalte (also dem Datum+Zeit) sortieren. Ich denke der Timestamp ist dafür sicher gewählt!?!?! Dies bewerkstellige ich mit:

1
sort -k3 file.txt
abcde           -5.3  2014-01-17 11:30:00
abcde           -2.1  2015-01-17 20:00:00
abcde           -2.1  2017-01-16 20:00:00
abcde           -8.1  2017-01-17 18:30:00
abcde           -9.8  2017-01-17 18:30:00
abcde           -9.9  2017-01-17 18:30:00
abcde           -5.1  2017-01-17 19:00:00
abcde           -5.1  2017-01-17 20:00:00
abcde            3.1  2017-02-17 15:00:00

Jetzt ist es sehr wichtig das ich Zeilen mit gleichen Datum/Zeit-Stempel rausschmeisse. Das wäre ja bei 2017-01-17 18:30:00 der Fall. Wichtig ist das unbedingt immer die letzte also unterste Zeile von denen mit gleichen Timestamp aus file.txt behalten wird. Also in diesem Fall:

abcde           -9.8  2017-01-17 18:30:00

Da scheint er mir ja schon die Reihenfolge durcheinander zu hauen

Wende ich jetzt uniq an, dann behält er die erste Zeile, die ja nicht wirklich immer sicher die letzte aus file.txt war:

1
sort -k3 -u file.txt
abcde           -5.3  2014-01-17 11:30:00
abcde           -2.1  2015-01-17 20:00:00
abcde           -2.1  2017-01-16 20:00:00
abcde           -8.1  2017-01-17 18:30:00
abcde           -5.1  2017-01-17 19:00:00
abcde           -5.1  2017-01-17 20:00:00
abcde            3.1  2017-02-17 15:00:00

Geht das irgendwie?

lg sappy

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Hallo, man könnte die Sortierung umdrehen (-r) und erst dann die doppelten Einträge ausfiltern und das Ergebnis wieder sortieren lassen:

1
$ sort -k3 -r file.txt | sort -k3 -u
abcde           -5.3  2014-01-17 11:30:00
abcde           -2.1  2015-01-17 20:00:00
abcde           -2.1  2017-01-16 20:00:00
abcde           -9.9  2017-01-17 18:30:00
abcde           -5.1  2017-01-17 19:00:00
abcde           -5.1  2017-01-17 20:00:00
abcde            3.1  2017-02-17 15:00:00

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Verstehe ich das richtig: das Ergebnis ist schon beihnahe in Ordnung - wenn er nur nicht den ersten, sondern den letzten Treffer nehmen würde ! ... ?

Dann könntest Du ja vorher ganz pragmatisch die Datei vorher umstülpen, und dann sortieren. Dann müsste er ja das Gewünschte liefern:

track@track:~$ tac  file.txt  |  sort -k3 -u
abcde           -5.3  2014-01-17 11:30:00
abcde           -2.1  2015-01-17 20:00:00
abcde           -2.1  2017-01-16 20:00:00
abcde           -9.9  2017-01-17 18:30:00
abcde           -5.1  2017-01-17 19:00:00
abcde           -5.1  2017-01-17 20:00:00
abcde            3.1  2017-02-17 15:00:00 

LG,

track

sappy

(Themenstarter)

Anmeldungsdatum:
24. Januar 2012

Beiträge: 282

Hallo track,

vielen Dank, scheint zu klappen. Ich teste es mal einige Zeit. Sollte doch noch was sein melde ich mich nochmal.

lg sappy

Antworten |