Получить последнее значение, появляющееся в столбце Y, для уникального значения, появляющегося в столбце X

Получить последнее значение, появляющееся в столбце Y, для уникального значения, появляющегося в столбце X

Надеюсь, заголовок не сбивает с толку. У меня есть файл ежедневного отчета, содержащий информацию о постоянных розничных продавцах, их транзакциях и балансе после каждой транзакции. Пример:

  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;

У розничного продавца может быть более одной транзакции, его баланс (retailersNewBalance) продолжает меняться так же часто, как и транзакции. Мне нужно сгенерировать отчет с помощью скрипта оболочки, чтобы распечатать последний баланс (retailersNewBalance) для каждого розничного продавца. Обратите внимание, что ret1 существует дважды в этом примере отчета (в 23:59:00 и в 16:43:10), и не могли бы вы добавить больше

Ожидаемый результат должен быть последним (недавним) розничным продавцом New Balance. Например:

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

решение1

Если входные данные отсортированы по дате, начиная с самых последних:

awk 'BEGIN{FS=";"} FNR>1 && !nameseen[$2]++ {print $1, $2, $4}' file
  • Распечатать запись можно только в том случае, если поле из столбца «retailerName» не было просмотрено.

Пример с некоторым форматированием:

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

Связанный контент