sed / awk能为此工作吗?改用别的东西?

时间:2012-10-04 18:10:10

标签: ruby sed awk

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

我有一个MySQL数据库表,其中包含访问我网站的访问者。列是日期,IP地址,浏览器,URL,引用。

我想这样做:

  1. 在特定日期内抓取所有行
  2. 删除所有行,确保在每个15分钟的时间间隔内,没有两行具有相同的IP地址
  3. sed / awk是否适合这类问题?或者像Ruby这样的脚本语言会更合适吗?

    我并没有“得到”sed / awk实际上是什么。随意简要解释一下。谢谢!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

Sed和Awk是文本处理工具。因此,它们可以在您的数据以漂亮的文本格式(通常等同于人类可读的)呈现的情况下提供帮助。

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

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

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

希望这有助于=)

答案 2 :(得分: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)

注意:这不会对行检查进行删除,但是您可以了解如何开始开发。