Gruppieren und Sortieren | Letzte Anmeldezeit von Benutzern

Gruppieren und Sortieren | Letzte Anmeldezeit von Benutzern

Ich habe eine CSV-Datei für das Anmeldedatum der Benutzer

user1,2019-05-21
user1,2019-05-22
user1,2019-05-23
user2,2019-05-20
user2,2019-05-21
user3,2019-05-24
user3,2019-05-29
user4,2019-05-25
user4,2019-05-28

ich brauche es im folgenden Format.

user1,2019-05-23
user2,2019-05-21
user3,2019-05-29
user4,2019-05-28

Ich habe es versuchtawk -F, '!a[$1]++', was mir den ersten Wert gibt, nicht den letzten.

Antwort1

$ sort -t, -k1,1 -k2,2r file | sort -t, -u -k1,1
user1,2019-05-23
user2,2019-05-21
user3,2019-05-29
user4,2019-05-28

Der erste sortSchritt sortiert die Daten nach Benutzer und umgekehrten Daten. Die Ausgabe dieses Schritts sieht wie folgt aus:

user1,2019-05-23
user1,2019-05-22
user1,2019-05-21
user2,2019-05-21
user2,2019-05-20
user3,2019-05-29
user3,2019-05-24
user4,2019-05-28
user4,2019-05-25

Bei der zweiten sortSortierung wird nur nach den Benutzern sortiert, und es wird nur eine Instanz der Zeilen jedes Benutzers gespeichert (die erste, die gefunden wird).

Antwort2

Wie in den Kommentaren erwähnt, wurde dies bereits gefragt und es wurden mehrere Antworten gegeben. Ich möchte noch eine hinzufügen:

sort -r input.csv | awk -F, '!a[$1]++' | sort

Testlauf:

$ sort -r input.csv | awk -F, '!a[$1]++' | sort
user1,2019-05-23
user2,2019-05-21
user3,2019-05-29
user4,2019-05-28

Erläuterung:

Sie wissen bereits, wie Sie das erste Vorkommen der ersten Spalte drucken. Wenn Sie das letzte wollen, müssen Sie sich nicht weiter den Kopf zerbrechen: Sortieren und kehren Sie die Liste einfach mit um sort -r. Als letzten Schritt und nur, wenn Ihr Ergebnis sortiert werden muss, leiten Sie erneut zu weiter sort.


Keine Rohre:

Sie können dies auch mit einem einzigen Befehl lösen. Wenn die Eingabedatei sortiert ist (wie in Ihrem Beispiel):

awk -F, '{a[$1]=$2}END{for(k in a){print k","a[k]}}' input.csv

ansonsten:

awk -F, '$2>a[$1]{a[$1]=$2}END{for(k in a){print k" "a[k]}}' input.csv

verwandte Informationen