Obtener el último valor que aparece en la columna Y, el valor único aparece en la columna X

Obtener el último valor que aparece en la columna Y, el valor único aparece en la columna X

Espero que el título no sea confuso. Tengo un archivo de informe diario que contiene información sobre los minoristas habituales, sus transacciones y su saldo después de cada transacción. ejemplo:

  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;

El minorista puede tener más de una transacción, su saldo (minoristaNewBalance) sigue cambiando tanto como realiza las transacciones. Necesito generar un informe usando un script de shell para imprimir el saldo reciente (minoristasNewBalance) de cada minorista. Observe que ret1 existe dos veces en este informe de ejemplo (a las 23:59:00 y a las 16:43:10) y ¿podría saber más?

La producción esperada debería ser la de los últimos (recientes) minoristas New Balance. ex:

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

Respuesta1

Si la entrada está ordenada por fecha, con la más reciente primero:

awk 'BEGIN{FS=";"} FNR>1 && !nameseen[$2]++ {print $1, $2, $4}' file
  • Sólo imprima el registro si no se ha visto el campo de la columna "NombreRetailer"

Ejemplo con algún formato:

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

información relacionada