我有一个列表,其中前6位是yyyymmdd格式的日期。接下来的4位数是时间戳的一部分。我想只选择那些任何一天最大时间戳的数字。
20160905092900
20160905212900
20160906092900
20160906213000
20160907093000
20160907213000
20160908093000
20160908213000
20160910093000
20160910213100
20160911093100
20160911213100
20160912093100
从上面的列表中表示输出应该给出以下列表。
20160905212900
20160906213000
20160907213000
20160908213000
20160910213100
20160911213100
20160912093100
答案 0 :(得分:1)
$ sort -r file | awk '!seen[substr($0,1,8)]++' | sort
20160905212900
20160906213000
20160907213000
20160908213000
20160910213100
20160911213100
20160912093100
如果文件已经排序,您可以使用tac
代替sort
。
答案 1 :(得分:0)
您可以使用awk:
awk '{
dt = substr($0, 1, 8)
ts = substr($0, 9, 12)
}
ts > max[dt] {
max[dt] = ts
rec[dt] = $0
}
END {
for (i in rec)
print rec[i]
}' file
20160905212900
20160906213000
20160907213000
20160908213000
20160910213100
20160911213100
20160912093100
我们正在使用关联数组max
,它使用前8个字符作为键,后4个字符作为值。此数组用于存储给定日期的最大时间戳值。当我们遇到时间戳值大于rec
数组中的存储值时,另一个数组max
用于存储日期的完整行。