在unix文件中查找特定记录的最新条目

时间:2016-02-08 09:15:46

标签: bash shell unix

我有一个文件,其中包含单个记录的多个条目。例如:

abc~20160120~120
abc~20160125~150
xyz~20160201~100
abc~20160205~200
xyz~20160202~90
pqr~20160102~250

第一列是记录名,第二列是日期,第三列是该特定日期的条目。

现在我想在我的文件中显示的是特定记录的最新条目。这就是我的输出应该是什么样子

abc~20160205~200
xyz~20160202~90
pqr~20160102~250

任何人都可以帮助使用shell脚本吗?请记住,我有太多记录需要先根据记录名称进行排序,然后根据日期为每条记录取出最新记录。

2 个答案:

答案 0 :(得分:2)

按记录名称和日期反转对行进行排序,而不是使用排序的-u唯一标志仅输出每条记录的第一个条目:

sort -t~ -k1,2r  < input-file | sort -t~ -k1,1 -u

答案 1 :(得分:-1)

使用awk,您可以避免对大文件进行排序,并使用单个命令获取结果:

awk -F '~' '$2>a[$1]{a[$1]=$2; r[$1]=$0} END{for (i in r) print r[i]}' file

<强>输出:

abc~20160205~200
pqr~20160102~250
xyz~20160202~90