awk之取每天的第一条记录和最后一条记录

本文介绍如何利用awk命令处理包含特定时间戳的数据文件。通过对数据进行筛选、统计及提取,实现了按日期筛选记录的功能,并提供了多种awk命令的示例,帮助读者理解和应用这些命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

file:
2011-10-25 8:41:20
2011-10-25 8:41:38
2011-10-25 18:10:09
2011-10-26 8:29:05
2011-10-26 18:07:27
2011-10-27 8:35:41
2011-10-27 18:51:18
2011-10-28 8:38:00
2011-10-28 18:08:01
2011-10-29 8:46:13
2011-10-29 18:08:00
2011-10-31 18:05:33
2011-11-1 8:33:16
2011-11-1 18:07:07
2011-11-2 8:29:46
2011-11-2 18:05:41
2011-11-3 8:29:17
2011-11-3 18:04:40
2011-11-4 8:34:29
2011-11-4 18:10:23

#取出每天的第一条记录
awk '!a[$1]++' file
!a[$1]++取第一次出现的

#统计相同的日期的个数
awk '{a[$1]++}END{for(i in a)print i,a[i]}' file
 
#加个($2==8)的限制条件
awk -F ' |:' '!a[$1]++&&($2==8)' file

#取每天的最后一条记录
awk '!a[$1]++&&i{print i}{i=$0}END{print i}' file
awk 'NR>1{if($1!=x)print y}{x=$1;y=$0}END{print $0}' file   
取最后一条只需取首次出现的上面那条即可,通过{i=$0}将$0赋给i,!a[$1]++限制首次出现,
首行i为空,会打印一个空行,加个&&i来保证不打印那个空行,最后必须要有END{print i},
最后一行要单独打印
{i=$0}保存上一行的记录是常规用法。
if($1!=x)print y}{x=$1;y=$0} 保存$1 $0
#加个($2==18)的条件
awk -F ' |:' '!a[$1]++&&i{print i}{if($2==18)i=$0}END{print i}' file 





                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值