星期四, 6月 28, 2012

常用sed與awk


  1. 統計行數
    單一檔案
    awk 'END{print FNR}' xxx.log

    多個檔案
    awk 'END{print FNR}' *.log
    用linux本身的wc指令也可達到效果
    wc -l *.log
  2. 取出重覆及不重覆次數
    [root@test]# cat a.txt
    12 1209185885333940
    12 1209185089989307
    12 1209185891525318
    13 1209186004855839
    13 1209185995006463
    13 1209185995006463

    awk '{a[$1]++}flag[$1,$2]!=1{b[$1]++}{flag[$1,$2]=1}END{for (i in a)print i,a[i],b[i]}' a.txt
    --
    12 3 3
    13 3 2
    reference: 请教awk如何同时统计 总数与不重复个数?
  3. 列出符合的資料
    • 單筆
      sed '0,/PARSE_FROM_HERE/' a.txt
      awk '/regex/ {getline;print}' a.txt
    • 之後(含符合項)
      awk '/regex/,0' a.txt
      awk '/regex/,G' a.txt
    • 之後(不含符合項)
      sed '0,/regex/d' a.txt
      awk '/regex/ {getline;print}' a.txt
    • 之前
      試半天用不出來,乾脆先倒過來讀,就可用上面的方法做出來了
      sed '1!G;h;$!d' test | awk '/regex/,0'

星期二, 6月 26, 2012

vim及tmux視窗常用指令

兩個切換視窗切到指令都亂了
  1. 合併兩個即有視窗
    • vim: vert sb#
    • tmux
  2. 將目前的pane抽成獨立視窗
    • vim:
    • tmux: CTRL-b !
  3. 分割頁切換
    • vim: CTRL-W 方向鍵
      或是CTRL-W j(往右) or w(往下),大寫則相反
    • tmux: CTRL-o

星期二, 6月 19, 2012

php與awk

  1.  在php中執行shell
    可利用shell_exec
    shell_exec('ls -l');
  2. 使用awk
    $data = shell_exec("awk '{print $1}' " . $filepath );
  3. 取得單行awk內容
    由於shell_exec是一次將每行內容回傳,如果要一行行取得awk的資料就要搭配exec
    $feeds = array();
    exec("awk '{print $1}' " . $filepath, $feeds );
    foreach($feeds as $feed)
        echo $feed . '< br/>';
    

星期二, 6月 12, 2012

將url字串的參數轉為array

  1. 取出query部份
    $url = 'http://username:password@hostname/path?arg=value#anchor';
    $urlinfo = parse_url($url);
    ------------------------
    Array
    (
        [scheme] => http
        [host] => hostname
        [user] => username
        [pass] => password
        [path] => /path
        [query] => arg=value
        [fragment] => anchor
    )
  2. 轉成array
    $str = "first=value&arr[]=foo+bar&arr[]=baz";
    parse_str($str);
    echo $first;  // value
    echo $arr[0]; // foo bar
    echo $arr[1]; // baz
    
    parse_str($str, $output);
    echo $output['first'];  // value
    echo $output['arr'][0]; // foo bar
    echo $output['arr'][1]; // baz

References

星期一, 6月 11, 2012

php連oracle stored procedure

  • sql
    1. 建立連線
      $conn = oci_connect('YOUR_ACCOUNT', 'YOUR_PASSWORD','//IP_ADDRESS:PORT/SERVICE_NAME');
    2. 下sql
      $sql = "SELECT ID, NAME as \"name\"
      FROM CATEGORY
      WHERE PARENT_ID = 0 AND STATUS = 1
      ORDER BY CATEGORY_ID ASC";
    3. 取資料
      $stid = oci_parse($conn, $sql);
      oci_execute($stid);
      $nrows = oci_fetch_all($stid, $res,0, -1, OCI_FETCHSTATEMENT_BY_ROW);

      //echo "$nrows rows fetched
      print_r( $res);*/
  • stored procedure
    1. 建立連線
      $conn = oci_connect('YOUR_ACCOUNT', 'YOUR_PASSWORD','//IP_ADDRESS:PORT/SERVICE_NAME');
    2. 連stored procedure
      假設sp名為myStoredProcedured,目的是將取到的時間轉為unit timestamp
      $sql ="begin
      :result := myStoredProcedured(:result => to_date(:myDate,'yyyy-mm-dd'));
      end; ";
      $stmt = oci_parse($conn,$sql) or die('could not parse statement.');

      //bind參數
      oci_bind_by_name($stmt,':result',$result,10); //回傳值需靠參數回傳
      oci_bind_by_name($stmt,':myDate',$myDate,10);

      //給值
      $myDate = '2012-06-12';

      //取值
      oci_execute($stmt) or die('execute');
      print_r($result);
    3. 給參數

星期日, 6月 03, 2012

linux個人環境設定

每次重灌或換個新環境就得憑記憶重設定
乾脆直接記下來省時間...
感謝Dockerfile等工具... 以後這些都可以不用理了...

  1. bashrc
    vim ~/.bashrc
    
    export TERM=screen-256color #註1
    

    註1: lose vim colorscheme in tmux mode

  2. vim 環境設定
    • 環境
    • 縮排
  3. tmux
    # General configuration.
    # $ tmux show-options -g
    set -g base-index 1
    set -g display-time 5000
    set -g repeat-time 1000
    set -g status-keys vi
    set -g status-utf8 on
    set -g status-bg black
    set -g status-fg white
    set -g status-justify left
    set -g status-interval 1
    set -g status-left-length 15
    set -g status-right-length 55
    set -g status-left "#[fg=white,bright] #[fg=yellow,bright]#S #[default] |"      # session-name
    set -g status-right "#[fg=red,bright][ #[fg=cyan]#(git branch --no-color | sed -e '/^[^*]/d' -e 's/* //') #[fg=red]]#[default] #[fg=yellow,bright] %Y-%m-%d #[fg=green]%H:%M:%S #[default]#[fg=magenta,bright]#[default]"
    
    # window setting
    setw -g utf8 on
    setw -g window-status-format " [#I] #W "
    setw -g window-status-current-format " [#I] #W "
    setw -g window-status-current-fg black
    setw -g window-status-current-bg green
    setw -g window-status-current-attr default
    
    # using function keyCtrl+A
    unbind C-b
    set -g prefix ^A
    bind a send-prefix
    
    # split window
    unbind %
    unbind '"'
    bind v split-window -h
    bind | split-window -h
    bind h split-window -v
    bind - split-window -v
    

    設好後,重啟config
    tmux source-file ~/.tmux.conf
  4. git