我希望能够快速做这样的事情:
我有一个 MySQL 数据库表,里面有我网站的访问者。这些列是日期、IP 地址、浏览器、URL、引用者。
我想做这个:
- 抓取特定日期的所有行
- 删除所有行,确保在每 15 分钟间隔内,没有两行具有相同的 IP 地址
sed/awk 适合这类问题吗?或者像Ruby这样的脚本语言会更合适吗?
我不太“明白” sed/awk 的实际用途。也可以简单地解释一下。谢谢!
我建议为此目的使用 SQL。这就是为什么您首先将数据存储在数据库中的原因,不是吗?
Sed 和 Awk 旨在作为文本处理工具。因此,它们可以在您的数据以良好的文本格式(通常相当于人类可读)呈现的情况下提供帮助。
SQL 数据库通常以二进制格式存储,这些工具不是最好的选择。即使是人类可读的某些格式也可以使用其他工具更好地处理(XML 可能是最好的例子)。
如果您可以将数据库导出为 CSV(逗号分隔值电子表格),您可能有更好的机会使用这些工具来处理它。
否则,使用 Perl/Python/Ruby 和合适的 SQL 模块来访问数据会更容易。
希望这会有所帮助=)
Sed或Awk不适用于此问题,它们适用于文本处理。我建议使用Python
或PHP
与相关的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)
注意:这不会在删除之前进行行检查,但您会了解如何开始开发某些东西。