2015年1月15日星期四

convert date string to epoch in awk

convert date string to epoch in awk

In a program I need to convert date string like 2015-01-15 09:23:19 to epoch.

Suppose I have a text file a.txt like this:

2015-01-15 09:23:19
2015-01-15 09:23:30
2015-01-15 09:24:21

At first , I use shell to do it.

awk script1

awk -F"\t" '{ 
    cmd="date -d \""$1"\" +%s";
    cmd|getline epoch;
    print $1;
    close(cmd)
}'  a.txt > epoch.txt

Then, I use the mktime funciton in awk to do it:

awk -F"\t" '{
    a=$(NF-1); 
    split(a, vec, " ")
    split(vec[1], ymd,"-") 
    split(vec[2],hms,":") 
    a=ymd[1]" "ymd[2]" "ymd[3]" "hms[1]" "hms[2]" "hms[3]
    print $3"\t"$4"\t"$13"\t"mktime(a) 
}'  a.txt > epoch.txt

I compared this two methods to a 5 million line file. The first method takes several hours to do it while the second takes only about 1 min! The difference is amazing.

2015年1月7日星期三

svn 使用方法

昨天对一个更新流程进行提测,熟悉了一下svn的使用方法,特此记录一下

首先,在公司的svn仓库中新建一个目录(以new_dir为例)

svn  mkdir http://svn.a.com/svn/new_dir

然后,把新建的目录 new_dir checkout到本地

svn checkout http://svn.a.com/svn/new_dir

最后,将流程中要测试的scripts目录复制到new_dir

svn add scripts

然后,提交

svn ci -m "add scripts directory"

注意!

提交时的message必须满足一定的长度条件,太短的话会提交失败。

如果要查看仓库中是否已经有上面提交的内容,可以用 list命令

svn list http://svn.a.com/svn/new_dir

在整个过程中,我们都可以使用 svn status 命令来查看当前的状态。

2013年9月21日星期六

zsh: jekyll command not found

重启系统后,运行jekyll命令显示

jekyll: commmand not found

使用如下命令解决问题:
echo "source $HOME/.rvm/scripts/rvm" >> ~/.bash_profile

参考:http://stackoverflow.com/questions/15409418/after-installing-jekyll-getting-bash-jekyll-command-not-found

2013年9月9日星期一

ubuntu 12.40 安装jekyll

先安装rvm

curl -L https://get.rvm.io | bash -s stable --ruby
source ~/.rvm/scripts/rvm
rvm install 1.9.3
rvm use 1.9.3
rvm rubygems latest

然后替换 RubyGems 的到淘宝镜像:

gem sources --remove https://rubygems.org/
gem sources -a http://ruby.taobao.org/
gem sources -l


然后安装jekyll,在安装jekyll前先安装rdoc,否则会失败,

gem install rdoc
gem install jekyll

安装完毕

参考:
1.http://ruby-china.org/wiki/install-rails-on-ubuntu-12-04-server

2013年9月8日星期日

java.lang.IllegalStateException: Cannot forward after response has been committed in servlet 错误

写jsp程序时遇到这个错误,一般错误的原因是sendredirect后没有返回

protected void doPost() {
    if (someCondition) {
        sendRedirect();
    }
    forward(); // This is STILL invoked when someCondition is true!
}

解决方法是加一个return或加一个else分支:

protected void doPost() {
    if (someCondition) {
        sendRedirect();
        return;
    }
    forward();
}

protected void doPost() {
    if (someCondition) {
        sendRedirect();
    }else{
    forward(); 
}
}

但是我的代码中sendRedirect是最后一句代码,后面跟着return,居然还有这个运行错误.

原因在于jsp中response具有缓存大小的限制,如果达到这个限制,那么所有HTTP response headers和写入的html代码都会发送回客户端,也就是response is committed.虽然你没有显式指定返回.

检查了一下我的代码,原来我为了测试用如下代码向response写入了很多单词:
  PrintWriter out = response.getWriter();
  
  for( String str: result )
   out.print(str + " ");
  out.println(result.size());
  out.close();

注释掉这段代码之后就可以正常运行了.

参考:
1.http://stackoverflow.com/questions/2123514/java-lang-illegalstateexception-cannot-forward-after-response-has-been-committe/2125045#2125045
2.http://stackoverflow.com/questions/12693975/java-lang-illegalstateexception-cannot-call-sendredirect-after-the-response-h

2013年9月2日星期一

ubuntu12.04 安装 texlive和texstudio

二者都是从ppa安装,因为源里面版本可能会旧一些.

sudo add-apt-repository ppa:texlive-backports/ppa
sudo add-apt-repository ppa:blahota/texstudio
sudo apt-get update
sudo apt-get install texlive-xetex texstudio

安装时间挺长,耐心等待.

安装完后,我还安装了几个包,如下:

sudo apt-get install texlive-fonts-recommended         
sudo apt-get install texlive-lang-cjk         
这两个包是和中文,字体相关的,没装之前编译tex文件会出错,装了之和就没问题了.

最后,安装了苹果下面的"Hiragino Sans GB" 字体

下载之后,如下操作:
sudo mkdir /usr/share/fonts/applefonts
sudo chmod 777 /usr/share/fonts/applefonts
sudo mkfontscale     
sudo mkfontdir     
sudo fc-cache -fsv 


ok了.
参考:
1.https://launchpad.net/~blahota/+archive/texstudio/
2.https://launchpad.net/~texlive-backports/+archive/ppa
3.http://lzuzyy.blog.ubuntu.org.cn/content/texlive2012texstudio%EF%BC%88texmaker252%EF%BC%89%E7%9A%84%E4%B8%AD%E6%96%87%E9%85%8D%E7%BD%AE

2013年8月21日星期三

ubuntu12.04 安装grive

grive是google drive的linux客户端,安装过程如下:


sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install grive

然后,创建一个用于存放网盘文件的文件夹,假设为a,
mkdir a
cd a
sudo grive -a#不加sudo的话,我这里会出现错误.

第一次使用grive时需要grive命令中的-a选项获得google drive的权限.
打开终端现实的链接,选择allow,复制验证码到终端中,grive会自动同步网盘中的文件.

以后想同步的话就在终端切换到网盘目录,然后执行
sudo grive

ps:我第一次同步后发现所有文件权限都不够,直接修改如下:

sudo chmod -R 777 *

参考:http://www.webupd8.org/2012/05/grive-open-source-google-drive-client.html