星期三, 6月 01, 2011

intel fortran 使用大的陣列 ( > 2G)

跑數值的當然會需要有大大的記體,然後開大大的陣列
編譯時如果遇到  relocation truncated to fit 錯誤,那編譯時就加入
-shared-intel -mcmodel=medium
例如:
ifort -shared-intel -mcmodel=medium mycode.f90


如果用的是動態陣列,不會先知道用多大的陣列,可以編譯過關
但是執行時可能會遇到 segment fault 錯誤
那就執行程式前使用下列命令
ulimit -s unlimited

星期六, 5月 21, 2011

車控~


終於到了可以讓我這個老爸好好玩軌道組的時候了…今天帶小雞去反斗城買一組五百元左右的一火車及一個簡單的軌道組,想說來和現有的A夢火車拼一起,並且這樣就有二台小火車可以跑…結果明明架上寫的是498的…付錢卻變成1190……這種過年過節才買的下去的價位…當然就沒買了…不過還是買了99元的二倍長型軌道一包四支…
Posted by Picasa

星期五, 4月 29, 2011

ROMS再試

ROMS... n個年前就想玩了,實際上也每隔一段時間就玩一下…
重點是好難啊…沒有一次上手,希望這次能成…
這裏記錄一些指令…免得每次玩都要查半天
請確定你有裝 ifort 以及 intel math kernel liberary
而且這二個的初始路徑設置也都正確執行了…
mkdir roms
cd roms
svn co --username CMD https://www.myroms.org/svn/src/trunk <---這是roms主程式
svn co --username CMD https://www.myroms.org/svn/src/test  <---測試範例
找一個範例來試,DAMEE_4,它在 test/DAMEE_4目錄下 DAMEE_4包含三個子資料夾Data scoord11 scoord22, 再到scoord11中 修改 build.bash
cd test/DAMEE_4/scoord11
vi build.bash
export        MY_ROOT_DIR=${HOME}/roms <--主要是看你的trunk是放哪
# 以下的平行設定只有用到openmp…因為只有一台多核心電腦,沒有cluster
# export           USE_MPI=on            # distributed-memory parallelism
# export        USE_MPIF90=on            # compile with mpif90 script
##export         which_MPI=mpich         # compile with MPICH library
##export         which_MPI=mpich2        # compile with MPICH2 library
# export         which_MPI=openmpi       # compile with OpenMPI library
export        USE_OpenMP=off            # shared-memory parallelism
# 說過了,慣用ifort
export              FORT=ifort
#export              FORT=gfortran
# export              FORT=pgi
# 關掉debug,注意!!!netcdf 4以後版本一定要設USE_NETCDF4=on
# 注意2!! netcdf4以後版本理論上會在netcdf/bin資料夾中有一個nc-config 確定一下它的位置在path中
#        也就是你可以直接 nc-config 即可成功執行,不需打路徑。如果沒辦法的話,就想辦法讓它能被執行吧。
# 
#export         USE_DEBUG=on            # use Fortran debugging flags
 export         USE_LARGE=on            # activate 64-bit compilation
 export       USE_NETCDF4=on            # compile with NetCDF-4 library
#export   USE_PARALLEL_IO=on            # Parallel I/O with Netcdf-4/HDF5
# 下面這一行不打開,就沒有什麼要設定的啦…
#export       USE_MY_LIBS=on            # use my library paths below
改完之後執行 ./build.bash 會產生一個OceanO 可執行檔(如果沒有用open_mp的話,就是oceanS) 執行方法如下:
ln -s ../Data/netcdf4/* ./
export OMP_NUM_THREAD=4   <---看你要用幾個核心
./oceanO < oecea_damee_4.in > log &
注意:不知道為什麼,一定要把輸出結果轉到一個檔案…不然會segment fault。

配合ROMS所需: netcdf 4.1.2 + hdf5 + zlib 1.2.5

ROMS如果要用到netcdf4以上,必需要讓netcdf4編譯時用到 with hdf5 非常煩人
很快速的記下步驟:
一、安裝 zlib1.2.5
./configure --prefix=/usr/local/zlib --shared
make
make install
註:如果 --prefix=/usr/local/zlib 是讓zlib裝在 /usr/local/zlib 資料夾中。這樣裝的好處是方便管理,缺點是 lib 與 includ 所在地要另外告知系統(就是讓系統知道他們被放在/usr/local/zlib 中。通常我的作法是寫一個script放在/etc/profile.d中,內容如下:
#! /bin/bash
ZLIBHOME=/usr/local/zlib

if [ -z "${LIBRARY_PATH}" ]
then
    LIBRARY_PATH="$ZLIBHOME/lib"
    export LIBRARY_PATH
else
    LIBRARY_PATH="$ZLIBHOME/lib:${LIBRARY_PATH}"
    export LIBRARY_PATH
fi

if [ -z "${LD_LIBRARY_PATH}" ]
then
    LD_LIBRARY_PATH="$ZLIBHOME/lib"
    export LD_LIBRARY_PATH
else
    LD_LIBRARY_PATH="$ZLIBHOME/lib:${LD_LIBRARY_PATH}"
    export LD_LIBRARY_PATH
fi
安裝szip-2.1
http://www.hdfgroup.org/ftp/lib-external/szip/2.1/src/szip-2.1.tar.gz
tar zxvf szip-2.1.tar.gz
cd szip
export F77=ifort
./configure --prefix=/usr/local/szip
make all
make install
二、安裝 hdf5 同zlib,如果我們不是裝在預設的資料夾,就需要告訴系統lib與includ放哪。拿上面的script一下即可。
export FC=ifort
./configure --prefix=/usr/local/hdf5 --enable-fortran --enable-hl --enable-shared --with-szlib=/usr/local/szip --with-zlib=/usr/local/zlib

make
make check
make install
make check-install

三、安裝libjpeg (jpge-6b) 原來,hdf4和hdf5是不相容的,衛星資料用的是hdf4,所以來裝一下hdf4,上面的libjpeg與szip就是為了這個hdf4裝的,請注意路徑是否與下面的設定一致。 在安裝hdf4之前,還得先裝libjpeg (jpge-6b)
wget http://www.hdfgroup.org/ftp/lib-external/jpeg/src/jpegsrc.v6b.tar.gz
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
export F77=ifort
./configure --prefix=/usr/local/libjpeg
make all
# 需要自行新增資料夾…
mkdir /usr/local/libjpeg/bin
mkdir /usr/local/libjpeg/man
mkdir /usr/local/libjpeg/man/man1
make install
mkdir /usr/local/libjpeg/include
make install-headers
mkdir /usr/local/libjpeg/lib
make install-lib
四、安裝 hdf4
#因為gdal要新版,epel裏的太舊,所以要自己裝,重點是,如果這個 hdf4 打算讓gdal用,就必需加上下面三行
export CFLAGS="-fPIC"
export CXXFLAGS="-fPIC"
export LIBS="-lm"
export F77=ifort
./configure --prefix=/usr/local/hdf4 --with-szlib=/usr/local/szip --disable-netcdf --disable-fortran --enable-shared
#./configure --prefix=/usr/local/hdf4 --with-zlib=/usr/local/zlib --with-szlib=/usr/local/szip --with-jpeg=/usr/local/libjpeg --enable-fortran 
make
make check
make install
# 因為hdf4的bin裏也有叫做ncdump 與ncgen的執行檔,和netcdf取同樣名子,所以把它改掉。
cd /usr/local/hdf4/bin
mv ncdump h4dump
mv ncgen h4gen

四、安裝 netcdf 4.3.1.1 (C) 與 netcdf-4.2 (fortran)
注意,自4.2版之後,fortran c c++分開,要先裝c版,再裝fortran 版 CPPFLAGS="-I/usr/local/hdf5/include -I/usr/local/zlib/include" LDFLAGS="-L/usr/local/hdf5/lib -L/usr/local/zlib/lib"
所以改成下面指令
yum install libcurl-devel.x86_64
wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.3.1.1.tar.gz
tar zxvf netcdf-4.3.1.1.tar.gz
cd netcdf-4.3.1.1
./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-netcdf4 --enable-shared --enable-dap CPPFLAGS="-I/usr/local/hdf5/include -I/usr/local/zlib/include" LDFLAGS="-L/usr/local/hdf5/lib -L/usr/local/zlib/lib" 
make 
make check
make install
wget http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-fortran-4.2.tar.gz
tar zxvf netcdf-fortran-4.2.tar.gz
cd netcdf-fortran-4.2
#./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-shared CPPFLAGS="-I/usr/local/netcdf/include -I/usr/local/hdf5/include -I/usr/local/zlib/include" LDFLAGS="-L/usr/local/hdf5/lib -L/usr/local/zlib/lib -L/usr/local/netcdf/lib" 
#因為系也另外裝了netcdf,所以要注意LD_LIBRARY_PATH裏的順序,我們裝的netcdf要放前可,不然會用到系統裝的,會有問題。
#所以如果用上面的方法出現錯誤,可能是這個原因,那就改用下面的方法
CPPFLAGS="-I/usr/local/netcdf/include -I/usr/local/hdf5/include -I/usr/local/zlib/include" \
  LD_LIBRARY_PATH=/usr/local/hdf5/lib:/usr/local/zlib/lib:/usr/local/netcdf/lib:${LD_LIBRARY_PATH} \
  LDFLAGS="-L/usr/local/hdf5/lib -L/usr/local/zlib/lib -L/usr/local/netcdf/lib" \
  LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lz -lcurl" \
  ./configure  FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-shared --prefix=/usr/local/netcdf
安裝 netcdf 4.1.3
注意,自4.1.3版之後,不支援--with-hdf5=/usr/local/hdf5,取而代之的是改用
CPPFLAGS=-I/usr/local/hdf5/include LDFLAGS=-L/usr/local/hdf5/lib
所以改成下面指令
yum install curl-devel.x86_64
./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-netcdf4 --enable-shared --enable-dap CPPFLAGS=-I/usr/local/hdf5/include LDFLAGS=-L/usr/local/hdf5/lib 
make 
make check
make install

安裝 netcdf 4.1.2
./configure FC=ifort F77=ifort F90=ifort CXX=g++ --prefix=/usr/local/netcdf --enable-netcdf4 --enable-shared --with-hdf5=/usr/local/hdf5
make 
make check
make install

星期四, 4月 28, 2011

剪刀石頭布

忽然的,小雞就會猜拳了…
剪刀石頭布…輸的畫一筆…
誰說二歲八個月的小朋友好騙…
以下公布戰況…


註:那個用來畫臉的「有夠貴」彩色筆號稱無毒且耐操,不怕小朋友用力畫…但是輕~~~輕點啦…臉好痛啊~~~~

貓村

每逢週末溜小孩的時間,大多是跟團、桃園、大安森林公園或是台大…
無意間看到朋友的facebook講猴硐,看起來非常有趣…
重點是不遠且火車可以到,就殺過來了。


星期三, 4月 27, 2011

grd2xyz 解 etopo2 (netcdf) 然後用gawk挖空其中一塊…

自從GMT支援netcdf 後,有些三維的nc檔可以透過grd2xyz解…還算方便。
下面的程式主要是我有二個水深檔,一個是台灣附近500m解析度,一個是etopo2。
我想取出東經114.5-150.5,北緯14.5-55.5的水深,有500m解析度的水深就用他,沒有的話就用etopo2。然後合起來的水深內插成5分一個點,並轉成xyz檔。程式如下:

R1="-R114.5/150.5/14.5/55.5"
slonl=117
slonr=125
slatt=27
slatb=18
FN500m=taidpv626_500m.xyz
OFN=decetop.dat
DELTX="-I5m/5m -S2m -N1"
grd2xyz ETOPO2v2g_f4.nc -fg $R1 | gawk '! ($1 > L && $1 < R && $2 > B && $2 < T) {printf"%8.4f %8.4f %7.1f\n", $1, $2, -1*$3}' L=$slonl R=$slonr T=$slatt B=$slatb > $OFN
gawk '{print $1, $2}' decetop.dat | psxy $R1 -JM5i -S+0.01 -W0.001c -Ba10f5SWne -P -K > decetop.ps
pscoast -R -JM -B -G104 -Df -O -W0.01,104 >> decetop.ps
cat $FN500m >> $OFN
makecpt -Cseis -T-8000/8000/500 -Z > colors.cpt
nearneighbor $OFN $R1 $DELTX -Gbath.grd 1>/dev/null 2>&1
grdview bath.grd $R1 -JM5i -Qi100 -V -Sc -Ccolors.cpt -P -K > bath.ps
pscoast -R -JM -B -G104 -Df -O -W0.01,104 >> bath.ps
grd2xyz bath.grd -fg $R1 | gawk  '{printf"%8.4f %8.4f %7.1f\n", $1, $2, $3}'> resample_$OFN

ps2epsi decetop.ps decetop.eps
eps2jpg -d 600 -f decetop.eps
ps2epsi bath.ps bath.eps
eps2jpg -d 600 -f bath.eps
rm -f decetop.ps decetop.eps bath.ps bath.eps

星期四, 3月 24, 2011

本機 matlabpool 無法使用的問題

在Linux下要使用 matlabpool local n 如果出現 Attempt to reference field of non-structure array。
那有可能是它無法根據你的電腦名稱找到你的ip。請在linux終端機模式下試試下面的指令:
hostname -i
hostname -f
如果出現未知的遠端位址,那就是沒設定好啦。
解決方法如下:
hostname
會出現你設定的電腦名稱,如: mypc1
切換成root,然後 vi /etc/hosts
找到這一行
127.0.0.1      localhost.localdomain localhost
改成
127.0.0.1      mypc1 localhost.localdomain localhost
存檔

hostname -i <--會出現 127.0.0.1
hostname -f <-- 會出現 mypc1
然後記得一定要重開 matlab。

星期二, 12月 21, 2010

星期二, 12月 07, 2010

NETCDF + CENTOS + ifort 編譯

NETCDF + CENTOS + ifort 編譯
注意1: 如果裝gmt用自編的netcdf出現錯誤,說是curl之類的錯誤,可以先
export NETCDF_LIB="/usr/local/netcdf/lib -lcurl"

sh gmt_install.sh gmtvar.txt

注意2: 如果編譯遇到錯誤,說是少了crypt 之類的函數庫,可以試試不要編譯 dap
./configure --prefix=/usr/local/netcdf --disable-dap

下面的系統都試過了,應該沒有問題
netcdf + CentOs 5.4 + ifort 11.1 + icc emt64
先執行下面指令:

export CC=icc
export CXX=icpc
export CFLAGS='-O3 -xT -ip -no-prec-div -static'
export CXXFLAGS='-O3 -xT -ip -no-prec-div -static'

export F77=ifort
export FC=ifort
export F90=ifort
export FFLAGS='-O3 -xT -ip -no-prec-div -static'

export CPP='icc -E'
export CXXCPP='icpc -E'

# 然後
./configure --prefix=/usr/local/netcdf
make
#make test
好像改成
make check
make install

Cygwin + gfortran

export CC=gcc
export FC=gfortran
export F90=gfortran
export F77=gfortran
export CPPFLAGS=-DpgiFortran
./configure --prefix=/usr/local/netcdf/

防堵暴力 try ssh 密碼

由於有太多的小白喜歡try別人的電腦,所謂的try是指隨便猜一個帳號及密碼,一直試,總有試出來的時候。這種情況太比較大型的網站有效,因為有太多的帳號密碼啦。至於我們實驗室的話,沒幾個帳號,是不會那麼容易被try到。不過既然這是一個問題,那麼能的話還是做些防堵的工作才好。首先當然是要把 root 的帳號登入的權限關掉,因為程式第一個try的一定是root的密碼啦。關掉的方法是把/etc/ssh/sshd_config 裏的 PermitRootLogin yes
改為
PermitRootLogin no
之後重新啟動ssh。
再來是當每次有人用ssh連線時,啟動電腦來執行一個程式,這個程式會檢查/var/log/messages 的檔案,用連線進來的ip及 Faile password為關鍵字進行篩選,如果在一個小時內有錯過10次的連線的話,就叫防火牆把它的ip檔住,不再讓它連啦。
上面的文字包含二個重點,一個是如何在有使用者用ssh連線時去執行某程式;另一個是如何檢查log檔,看該使用者是否有try超過10次錯誤。
第一個問題的答案在/etc/hosts.allow 這個檔案裏有解。
在這個檔案裏加一行
sshd : ALL : spawn (/root/bin/block_ssh.pl %c %d)
第一個是服務名稱,第二個是來源,第三個則是執行的工作,其中spawn的意思是執行一個shell 命令。 %c %d 則是hosts.allow 裏的關鍵字,除了%c %d 以外還有很多可以試,請自行 man hosts.allow 來看。
%c 指的是連線進來的電腦的電腦名稱或ip。
%d 是指透過啥服務進來。 (不過前面寫了sshd,後面當然一定會是sshd,不過如果前面是ALL,那就有用啦。)
第二個問題的答案就太美妙啦,感謝vixual的無私貢獻以又酷學園裏的大大提出bug 修正,所以就有現成可以用的程式啦,是用perl寫的,其實概念不是太難。程式內容如下,把它存成 block_ssh.pl,所有者為root,存放位置隨便,當然啦,hosts.allow裏的spawn要隨之更改,這裏是放在 /root/bin/裏面,並且讓它以有可以執行的權限。
#!/usr/bin/perl

# 及時封鎖使用 "暴入法" 入侵的使用者(SSH)
# 技術支援: http://www.vixual.net/
# 原著者是 vixual (應該是吧!)
# chmod 755 block_ssh.pl
# 編輯 /etc/hosts.allow,加入
# sshd : ALL : spawn (/root/bin/block_ssh.pl %c %d)
# 這樣就完成了,如有必要,請自行修改 block_ssh.pl 裡相關的參數。
# 以上取自原作者的網站
# ==相關參數==

#記錄 ssh 連線的 LOG 檔,預設: /var/log/secure
$log_file = "/var/log/secure";

#於多久的時間內嘗試登入(秒),預設: 1 小小時
$time_range = 1 * 60 * 60;

#於 $time_range 所設定的時間內,嘗試登入失敗多少次立即封鎖 IP,預設: 10 次
$drop_count = 10;

#寄件通知,預設收件者: root@localhost
$mail = 'cmd@www.lapom.no-ip.org';

#寄件程式的位置
$sendmail = "/usr/sbin/sendmail";

#====

use Time::Local;

$ip = $ARGV[0];
$daemon = $ARGV[1];
$count = 0;
$ip =~ s/::ffff://;
%month = (
    Jan    =>    0,
    Feb    =>    1,
    Mar    =>    2,
    Apr    =>    3,
    May    =>    4,
    Jun    =>    5,
    Jul    =>    6,
    Aug    =>    7,
    Sep    =>    8,
    Oct    =>    9,
    Nov    =>    10,
    Dec    =>    11
);

$time = time();
($second,$minute,$hour,$day,$month,$year) = localtime($time);

#取得登入失敗的 logg
@list = `cat $log_file | grep "sshd.*Failed password.*$ip "`;
for(my $i = $#list; $i >= 0; $i--){
    #取得 log 的時間
    my($log_month,$log_day,$log_time) = split(/ +/,$list[$i]);
    my($log_hour,$log_minute,$log_second) = split(/:/,$log_time);
    #前一年的記錄
    if($log_month > $month){
        $log_year = $year - 1;
    }else{
        $log_year = $year;
    }
    #將時間轉為秒數
    $log_time = timelocal($log_second,$log_minute,$log_hour,$log_day,$month{$log_month},$log_year);
    if($time < $log_time + $time_range ){
        $count++;
    }else{
        last;
    }
}

if($count > $drop_count){
    #封鎖 IP
    `iptables -I INPUT -p tcp -s $ip --dport 22 -j DROP`;
    if($mail){
        #寄件通知
        $hostname = `hostname`;
        $month++;
        $year += 1900;
        chomp($hostname);
        open(MAIL, "| $sendmail -t") || die "Can't open $sendmail !\n";
        print MAIL qq|To: $mail\n|;
        print MAIL qq|Subject: [$hostname]封鎖 $ip\n|;
        print MAIL qq|Content-Transfer-Encoding: 8bit\n|;
        print MAIL qq|Content-type: text/plain\; charset=Big5\n\n|;
        print MAIL "\n時間: $year-$month-$day $hour:$minute:$second\n----\n使用者 \"$ip\" 嘗試以 SSH 登入伺服器,共失敗 $count 次,已於防火牆封鎖該 IP。\n\n";
        print MAIL @list;
        close(MAIL);
    }
}

exit;

懶人ssh 站台列表

因為工作的需要…常常要ssh到不同的電腦去跑CASE,如果用X介面的SSH client軟體,通常都可以弄一些站台列表。然後只要點選就可以,方便的很,可是如果是透過終端介面去連,都每都要下指令,非常的煩人。下面的script範例,可以把常連的機器放進去一個script中,以後只要執行它,就可以連到你想連的地方去啦,當然,我的功力普普,所以一定有可以改進的地方,就這樣啦,夠用就好。
把下面的文字存成lazssh.bash,當然,常用的電腦IP要改,最後增加可以執行的權限即可。以後只要執行它,就可以連到你想去的地方啦 。
#******************************
#ssh client menu script by CMD
#                               2010.02.25
#******************************
# specify PC's IP address here
# 把常用的電腦IP加在這裏
PC[1]="192.168.69.247"
PC[2]="192.168.69..243"
PC[3]="192.168.69..122"
PC[4]="192.168.69..141"
#***********************************
# do not need to be changed from here
REPEAT_LOOP=1
while [ "$REPEAT_LOOP" = 1 ]; do
    clear
    echo " Lazy ssh....."
    I=0
    for Spc in "${PC[@]}";do
      I=`expr $I + 1`
      echo " $I. ssh to $Spc."
    done
    I=0
    for Spc in "${PC[@]}";do
      I=`expr $I + 1`
      echo " X$I. ssh -X to $Spc."
    done
    echo " X|x.  EXIT."
    echo " "
    echo -n "Please type a selection: "
    read usr_choice &> /dev/null
    if (( $usr_choice > 0 && $usr_choice <= $I )) ; then
       echo "ssh ${PC[$usr_choice]}..."
       ssh ${PC[$usr_choice]}
    elif ([ $usr_choice = "X" ] || [ $usr_choice = "x" ]) ; then
       echo "Exiting ......"
       exit
    else
      tmp=`echo "$usr_choice" | sed s/X// | sed s/x// `
      if (( $tmp > 0 && $tmp <= $I )) ; then
        echo "ssh -X ${PC[$tmp]}..."
        ssh -X ${PC[$tmp]}
      else
        echo "Invalid Choice. Please try again."
        REPEAT_LOOP=1
      fi
    fi
done

殘念~ ulimit -s unlimited 無法執行

一直以來,我改過的POM<--好啦我的功力差啦,因為用太多的allocate陣<--其實是全部的陣列都用allocate。所以執行時會有stack太小的問題啦。詳情與解法過程寫過了,就不再寫。總之就是用下面的指令:
ulimit -s unlimited
一直以來都沒問題,今天確出現下面的訊息…
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
搞了半天,就是不給啦,大概就是你不是系統管理員,不給你改,(奇怪了,之前就沒這個問題,裝系統時也沒啥特別設定,不過我用的系統是CentOS4以後啦,現在這台是RHEL3)找了老半,總之要改下面這個檔案:
/etc/security/limits.conf
加一行:
*             hard    stack           unlimited
再重新登出/入就可以執行下面的指令了。
ulimit -s unlimited
至於為什麼……就懶得知道了。

把 shell 變數傳進 awk 程式當中

在寫shell scripts,gawk很常用吧…例如印file 的第一、二、五、六行
gawk '{print $1, $2, $5, $6}' file
如果想把第五,六行乘一個放大係數(如:10倍)
gawk '{print $1, $2, $5*10, $6*10}' file
上面這樣寫當然沒問題。但是為了方便,放大係數通常放到變數裏(就叫做SCALE好了)
SCALE=10
gawk '{print $1, $2, $5*$SCALE, $6*$SCALE}'  file
這樣就不行了…因為gawk自已也有變數,BASH也有變數,誰是誰要先弄清楚才行。
gawk變數設定方法是在' ' 的後面 與 輸入資料檔的前面(如果有的話) 設定。
改成如下:
SCALE=10
gawk '{print $1, $2, $5*sca, $6*sca}' sca=$SCALE file
注意,在gawk裏的變數是不用加"$"字符的。
有了這個,還可以對第n欄做累加。
gawk 'sum=sum+$1 {print $1, sum}' sca=$SCALE file
上面的指令會輸出file檔案裏的第一柵,以及第一欄的加總。

gawk 'sum=sum+$1; ss=ss+$2 {print $1, sum, $2, ss}' sca=$SCALE file
上面的指令會輸出file檔案裏的第一欄、第一欄的加總、第二欄與第二欄的加總。

星期日, 11月 28, 2010

linux gnome 桌面相關設定指令

關掉螢幕保護程式的密碼
gconftool-2 --set --type bool /apps/gnome-power-manager/lock/gnome_keyring_suspend false


關閉遠端桌面共用
gconftool-2 -s -t bool /desktop/gnome/remote_access/enabled false

打開遠端桌面共用
gconftool-2 -s -t bool /desktop/gnome/remote_access/enabled true

星期六, 3月 03, 2007

德式惡作劇


與往常一樣,假日總是下午才去學校…因為家裏沒網路沒電視,總之啥都沒有,所以例行的清潔一番之後,就很習慣的到學校去報到。
咦??怎麼路標上掛著腳踏車…沒錯,麊是腳踏車…

不知道該說是德國人高,還是德國路標不夠高…開這種不夠高還開不起的玩笑…

星期日, 4月 16, 2006

不來梅之冷到不行的夜景


每次坐公車回家時,看上去總是那麼美好,也一直想去拍拍看 結果…都四月了,還暴冷加上狂風。不知道「橋」是不是也覺得冷,被狂風吹得一直抖抖抖的… 這照片是把相機放在那冷的發抖的橋上拍的…還好,照片沒跟著抖抖抖。

星期日, 2月 19, 2006

阿里山日出~


哈,因為大陸同胞來台最想去的二個地方就是日月潭與阿里山。也因此突然間多了很多造訪阿里山的機會。由於到阿里山看日出是小弟一直以來的心願,無奈八字不合還是怎樣,總是一次又一次的錯過。這次多謝有貴人同行,終於讓我看到出日啦…只是,哈~~~技術太差(其實我比較堅持是相機不好啦)。所以沒有成功的日出照片可以秀在這邊,至於這張照片則是看完日出後在神木步道時所拍的。(所以標題絕對沒有下錯……還是…難道您覺得該下「阿里山日出後~」這樣的標題?)
當然,裏面的人就是這次同行的「貴人」啦。
真慘,都快忘了這是什麼時候拍的啦~
如沒記錯這應該是2003年的事啦,那個時候用的呆瓜數位相機是Nikon Cool Pix 775...

謝謝阿勇仔的新年祝福


收到這份祝福當然是過年前的事啦,只是一陣沒頭沒腦的忙(茫?)…所以一直拖到現在才讓這份祝福公諸於世… 真是不好意思啦…
這樣的祝福還真有創意,只是我如果照著做不就變成抄襲了嗎……加上日子也過去了,所以我的朋友們,對不起啦……。
ps:其實我是有偷偷的祝福大家的,不然您怎能在這開開心心的看我的網誌呀…

星期一, 1月 23, 2006

也是三明治的同學,一個已婚(就不用介紹了);另一個未婚,但有女朋友了……所以也不好介紹。總之,他們不是主角啦,只是版面佔的稍大一點(畢竟大家是同梯的)。
所以就來談談那隻「毛」吧!!
那隻「毛」的名字叫做Zuzu,是那個阿勇仔家養的,特點是很冷的時候會跑到床上去睡覺,趕都趕不開。
因為外國人的發音沒有一、二、三、四與輕聲。所以每次阿勇仔在講他家的Zuzu時,都是說我的「毛」OOXX…嚇屬人啦,我可沒那個興趣…