使用sed在X分钟内删除基于一个字段的重复行
我有一个这样的日志文件使用sed在X分钟内删除基于一个字段的重复行,sed,Sed,我有一个这样的日志文件 6bTxPVZ2aOXEQ5C jamesbond.2015@business.my.emaildomain.com [01/Dec/2015:00:00:00 +0200] 3bTxPVZ2dfXEQ5C kellytan.2016@business.my.emaildomain.com [01/Dec/2015:00:00:02 +0200] 9bTxPVZ2dfXEQ6C jamesbond.2016@business.my.emaildomain.com [
6bTxPVZ2aOXEQ5C jamesbond.2015@business.my.emaildomain.com [01/Dec/2015:00:00:00 +0200]
3bTxPVZ2dfXEQ5C kellytan.2016@business.my.emaildomain.com [01/Dec/2015:00:00:02 +0200]
9bTxPVZ2dfXEQ6C jamesbond.2016@business.my.emaildomain.com [01/Dec/2015:00:00:05 +0200]
如果第二个字段“电子邮件”字段与具有相同电子邮件的前一行重复,如何使用sed删除重复行
也
仅当副本之间的距离在3分钟内(使用第3个日期/时间戳字段)时,才需要执行此操作
在上面的示例中,第三行将被删除,除非在最后一行之后超过3分钟 此脚本解决部分查询。datos.dat文件包含您的代码段,但修复了电子邮件地址jamesbond。2015@business.my.emaildomain.com我是詹姆斯邦德。2016@business.my.emaildomain.com. 对于次要修复,您应该修复您的问题:
#! /bin/sh
OIFS="$IFS"
IFS=$'\n'
month_to_number()
{
local month=$1
case $month in
Jan) echo 01 ;;
Feb) echo 02 ;;
Mar) echo 03 ;;
Apr) echo 04 ;;
May) echo 05 ;;
Jun) echo 06 ;;
Jul) echo 07 ;;
Ago) echo 08 ;;
Sep) echo 09 ;;
Oct) echo 10 ;;
Nov) echo 11 ;;
Dec) echo 12 ;;
esac
}
get_utc()
{
#BAD_DATE="01/Dec/2015:00:00:05"
local INPUT=$1
DAY=$(echo $INPUT | cut -f 1 -d "/")
TXT_MONTH=$(echo $INPUT | cut -f 2 -d "/")
MONTH=$(month_to_number $TXT_MONTH)
YEAR=$(echo $INPUT | cut -f 3 -d "/" | cut -f 1 -d ":")
HOUR=$(echo $INPUT | cut -f 2 -d ":")
MIN=$(echo $INPUT | cut -f 3 -d ":")
SEC=$(echo $INPUT | cut -f 4 -d ":")
#GOOD_DATE="2015-12-01 00:00:05"
GOOD_DATE="$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC"
UTC=$(date -d $GOOD_DATE +%s)
echo $UTC
}
for EMAIL in $(cat datos.dat | cut -f 2 -d " " | sort | uniq)
do
FOUND_BAD_DATE=""
FOUND_UTC=""
for ROW in $(cat datos.dat | grep $EMAIL)
do
FIRST_COL=$(echo $ROW | cut -f 1 -d " ")
BAD_DATE=$(echo $ROW| cut -f 3 -d " " | sed "s/\[//")
UTC=$(get_utc $BAD_DATE)
if [ "$FOUND_UTC" == "" ]; then
FOUND_BAD_DATE="$BAD_DATE"
FOUND_UTC=$UTC
continue
fi
if [ $FOUND_UTC -lt $UTC ]; then
FOUND_BAD_DATE="$BAD_DATE"
FOUND_UTC=$UTC
fi
done
echo "$FIRST_COL $EMAIL [$FOUND_BAD_DATE]"
done
IFS="$OIFS"
sed是您要用于此目的的唯一工具吗?awk更适合我在windows上,我可以使用awk吗?