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