該腳本解決了部分查詢問題。 datos.dat文件包含您的代碼段,但修復電子郵件地址[email protected]爲[email protected]。對於小的修復,你應該修復你的問題:
#! /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會更適合 – Sundeep
我在windows上,我可以使用awk嗎? –