Linux

獲取最後一個值出現在 Y 列中,以便唯一值出現在 X 列中

  • March 29, 2020

我希望標題不會令人困惑。我有一個每日報告文件,其中包含有關正常零售商、他們的交易以及每次交易後的餘額的資訊。例子:

 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) 會隨著他的交易量不斷變化。我需要使用 shell 腳本生成一份報告,以列印出每個零售商的最近餘額 (retailersNewBalance)。請注意,此範例報告中的 ret1 存在兩次(分別在 23:59:00 和 16:43:10)

預期的輸出應該是最後一個(最近的)零售商New Balance。前任:

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

如果輸入按日期排序,最近的在前:

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

引用自:https://unix.stackexchange.com/questions/576643