Holen Sie sich den letzten Wert, der in Spalte Y erscheint, für den eindeutigen Wert, der in Spalte X erscheint

Holen Sie sich den letzten Wert, der in Spalte Y erscheint, für den eindeutigen Wert, der in Spalte X erscheint

Ich hoffe, der Titel ist nicht verwirrend. Ich habe eine tägliche Berichtsdatei mit Informationen über reguläre Einzelhändler, ihre Transaktionen und ihren Saldo nach jeder Transaktion. Beispiel:

  TransactionDate;retailerName;retailersBalance;retailersNewBalance;TrAmount;TaxAmount
   2020-03-28 23:59:00;ret1;522305800;522300200;5040;560
   2020-03-28 18:47:04;ret2;3166007400;3165997400;9000;1000
   2020-03-28 16:43:10;ret1;522311400;522305800;5040;560;

Der Einzelhändler hat möglicherweise mehr als eine Transaktion, sein Kontostand (retailersNewBalance) ändert sich ständig, genauso wie er Transaktionen durchführt. Ich muss einen Bericht mit einem Shell-Skript erstellen, um den aktuellen Kontostand (retailersNewBalance) für jeden Einzelhändler auszudrucken. Beachten Sie, dass ret1 in diesem Beispielbericht zweimal vorhanden ist (um 23:59:00 und um 16:43:10) und mir mehr

Die erwartete Ausgabe sollte das New Balance des letzten (aktuellen) Einzelhändlers sein. Beispiel:

   Time    Retailers  Balance
 ================================
 23:59:00   ret1     522300200
 18:47:04   ret2     3165997400

Antwort1

Wenn die Eingabe nach Datum sortiert ist, mit den aktuellsten zuerst:

awk 'BEGIN{FS=";"} FNR>1 && !nameseen[$2]++ {print $1, $2, $4}' file
  • Drucken Sie den Datensatz nur aus, wenn das Feld aus der Spalte „retailerName“ nicht angezeigt wurde.

Beispiel mit etwas Formatierung:

awk 'BEGIN {
    FS=";"
    printf "%9s\t%-20s\t%s\n", "Time", "Retailers", "Balance"
}
FNR>1 && !nameseen[$2]++ {
    split($1,time," ")
    printf "%9s\t%-20s\t%s\n", time[2], $2, $4
}' file

verwandte Informationen