linux初探

首页

应用服务器

Linux技巧

中文文档

Linux初级

服务器源代码

命令详解

Linux技术应用

Linux安全应用

Linux业界新闻

UniX技术文章

Linux编程与内核

Linux数据库

Linux服务器

Linux安装指导

Linux论坛

首页>>Linux编程与内核>>文章正文

Shell, Sqlite,date和awk

上周写了有生以来最复杂的Shell程序,这个程序的目的是从一个文本文件生成各种统计信息。文本文件有1000多行,每行对应一条记录,每条记录有10来个域。统计的信息很多,比如一个长时间段内,某个域发生某种变化的记录总数的变化趋势。统计信息的种类最终是8项。

  我决定拿Sqlite来作这个事情。Sqlite是个轻量级的数据库,它提供一个sqlite的命令行,通过它就能完成创建数据库、插入数据、查询等各种操作。我所要做的就是:

  1.从原始数据文件,也就是那个文本文件,生成一个sql语句文件,进而用sqlite生成数据库;
  2.生成查询统计信息的sql语句文件,然后用sqlite命令行进行查询。

  在shell程序中使用sqlite很方便,首先需要生成这样的sql语句文件
  sql语句文件sql.txt:
.output Somefile // 这句话告诉sqlite把sql执行的结果输出到文件
create tab ... // 正常的sql语句
insert into ....
.quit // 告诉sqlite退出

  然后,cat sql.txt | sqlite data.db。这样,sqlite就会执行sql.txt中的sql语句,并把结果保存到Somefile中。

  从原始数据生成创建数据库的sql.txt,当然是awk最胜任了。我也是这次才发现awk如此的好用。在计算平均值的时候也只能求助于它,因为它不会把商取整。
echo "$a $b"|awk '{ print $1/$2 }' #计算a/b的值

  最后说说shell编程,如果能有选择的话,我肯定会挑python、tcl甚至ruby,这样代码至少会让减少70%,看起来也会更elegant。一开始在Linux上写这个脚本,把对日期的处理完全交给date命令了,但是最终脚本运行在solaris上时,才发现solaris上的date傻得可以,只好自己处理日期的增减变化。不过提醒一下各位如果你们在Linux山写脚本要涉及日期的处理时,大可以把这份脏活交给date命令来作。

  比如你想看某个特定日期,比如说2005年10月1日,的前20天的日期,这么做就可以了:date "+%D" --date="10/01/2005 20 days ago"

相关文章

·SHELL利用的各种初期化文件
·Shell的特点
·Shell脚本的建立
·升级和编译你的Linux核心
·tmpfile函数
·我爱linux
·linux内核时间,延迟,和延缓操作
·Linux下的Matlab使用syms出错的问题
·在Unix/Linux系统下调试脚本程序

热门文章

·C++中控制Windows关机的实用
·C++继承性应用实例 日期和时
·C++类型转换时定义非成员函数
·从模板中分离出参数无关的代
·C++中用函数模板实现和优化抽
·用C++ Builder检测Windows的
·用C++ Builder来定制系统菜单
·C++语言代码检查工具PC-Lint
·用C语言实现常见的三种中文内
·用C++ Builder开发多层数据库

Copyright@2005 www.linuxGoo.com All Right Reserved