![获取 Y 列中出现的最后一个值,以获取 X 列中出现的唯一值](https://linux22.com/image/170085/%E8%8E%B7%E5%8F%96%20Y%20%E5%88%97%E4%B8%AD%E5%87%BA%E7%8E%B0%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E5%80%BC%EF%BC%8C%E4%BB%A5%E8%8E%B7%E5%8F%96%20X%20%E5%88%97%E4%B8%AD%E5%87%BA%E7%8E%B0%E7%9A%84%E5%94%AF%E4%B8%80%E5%80%BC.png)
我希望标题不会令人困惑。我有一份每日报告文件,其中包含有关常规零售商、他们的交易以及每次交易后的余额的信息。例子:
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
答案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