如何定义开始和结束日期的几个月

时间:2016-09-08 09:28:28

标签: regex bash date grep

所以这就是我的问题:我有大的日志文件,并希望脚本能够访问某些时间段并将它们安全地保存到文件中(已排序),基本上

protected void EditarIngreso_Click(object sender,EventArgs e)
{
LinkButton btn = sender as LinkButton ;
GridViewRow row = btn.NamingContainer as GridViewRow;

string pk = gvIndex.DataKeys[row.RowIndex].Values[0].ToString();
  // here PK is your ID 
  // Convert it to Int32
}

将返回例如

bash script.sh Jul 4 Sep 30

我的第一次尝试是每个月和日期都有自己的变量,如

Sep 30 user0 logged in
Sep 15 user1 logged in
Aug 6 user0 logged in
Aug 3 user1 logged in
Jul 28 user2 logged in
Jul 27 user2 logged in
Jul 4 user0 logged in

所以我可以使用1美元作为开始月份(7月),2美元作为开始日期(4)等等,以grep为基础

bash script.sh Jul 4 Sep 3 0

从7月4日到9日获取所有日志,但我不知道如何从整个时间段获取不在同一个月或1-9或10-期间的日志19等等 任何帮助非常感谢!

修改

正如有些人问的那样,这里的日志文件看起来如何(只是更大而且没有排序):

for logs in logs*
do
grep -qEe "^\"$1\" [\"$2\"-9]\s" $messages >> result.txt
done

2 个答案:

答案 0 :(得分:0)

这是我的看法:

#/bin/bash

year="$(date +"%Y")"
start="$(date -d"$1 $2, $year" +'%s')"
end="$(($(date -d"$3 $4, $year" +'%s')+86400))"
for log in logs*; do
    while IFS= read -r line; do
        d="$(date -d"$(cut -d' ' -f1,2 <<< "$line"), $year" +'%s')"
        if (( $start <= $d && $d < $end )); then
            echo "$s"
        fi
    done < "$log"
done

你这样运行:./script.sh Jul 04 Sep 03。由于日志中不包含年份,因此它假定所有日期(包括命令行中的日期)都是当前年份。它可能不是最优化的解决方案,但它有效。它依赖于date,它反复调用将日期解析为unix时间戳。 unix时间戳很好,因为它们只是数字,因此可以用于数字比较。

答案 1 :(得分:0)

$ range="Jul 4 Sep 30"
$ awk -v range="$range" '
BEGIN {
    numMths = split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m)
    for (i in m) {
        mths[m[i]] = i
    }

    split(range,r)
    beg = sprintf("%02d%02d", mths[r[1]], r[2])
    end = sprintf("%02d%02d", mths[r[3]], r[4])
}
{ cur = sprintf("%02d%02d", mths[$1], $2) }
(cur >= beg) && (cur <= end) { vals[$1,$2] = $0 }
END {
    for (mthNr=numMths; mthNr>0; mthNr--) {
        for (dayNr=31; dayNr>0; dayNr--) {
            date = m[mthNr] SUBSEP dayNr
            if (date in vals) {
                print vals[date]
            }
        }
    }
}
' file
Sep 30 user0 logged in
Sep 5 user1 logged in
Aug 31 user1 logged in
Aug 6 user0 logged in
Jul 27 user2 logged in
Jul 14 user0 logged in
Jul 8 user2 logged in