0

我希望能够快速做这样的事情:

我有一个 MySQL 数据库表,里面有我网站的访问者。这些列是日期、IP 地址、浏览器、URL、引用者。

我想做这个:

  1. 抓取特定日期的所有行
  2. 删除所有行,确保在每 15 分钟间隔内,没有两行具有相同的 IP 地址

sed/awk 适合这类问题吗?或者像Ruby这样的脚本语言会更合适吗?

我不太“明白” sed/awk 的实际用途。也可以简单地解释一下。谢谢!

4

3 回答 3

2

我建议为此目的使用 SQL。这就是为什么您首先将数据存储在数据库中的原因,不是吗?

于 2012-10-04T18:14:13.250 回答
2

Sed 和 Awk 旨在作为文本处理工具。因此,它们可以在您的数据以良好的文本格式(通常相当于人类可读)呈现的情况下提供帮助。

SQL 数据库通常以二进制格式存储,这些工具不是最好的选择。即使是人类可读的某些格式也可以使用其他工具更好地处理(XML 可能是最好的例子)。

如果您可以将数据库导出为 CSV(逗号分隔值电子表格),您可能有更好的机会使用这些工具来处理它。

否则,使用 Perl/Python/Ruby 和合适的 SQL 模块来访问数据会更容易。

希望这会有所帮助=)

于 2012-10-04T18:18:30.027 回答
0

SedAwk不适用于此问题,它们适用于文本处理。我建议使用PythonPHP与相关的SQL库/模块结合使用,并使用cron来安排脚本的执行。脚本将与此类似(对于 php)。

$db_host = 'localhost';
$db_user = 'mysql_user'
$db_pwd = 'supersecret'

$Date = '10/3/2010' #Whatever the date format is in the DB 
mysqlconnect($db_host, $db_user, $db_pwd);

$result = mysql_query("SELECT * FROM db.table WHERE time=$Date);

while (!$row = mysql_fetch_row($result))
    echo $row

# Should check IP before deletion - **WARNING** Will delete all data from table
mysql_query("DELETE FROM db.table")

mysql_free_result($result)

注意:这不会在删除之前进行行检查,但您会了解如何开始开发某些东西。

于 2012-10-04T18:32:18.530 回答