2015年1月28日 星期三

在matlab把資料寫入到不同檔案 (檔名是變數)

我要寫入 node 1~20 的座標資訊到不同的txt檔: 1.txt, 2.txt .... 以此類推

用 num2str 這個指令就可以了!!! (終於知道這個的用法 XD)

-------------------------------------

for nodeIndex = 1:NODES
     fid = fopen([ num2str(nodeIndex) '.txt'], 'at');
     fprintf(fid, '%.2f %.2f \n', node_x, node_y );
     fclose(fid);

end

2015年1月26日 星期一

用shell script產生ns2的cbr traffic語法

ns2裡面先設定好 attach-cbr-traffic 這個function
接下來只要給他 src, dst, flow_id就好了.
pkt_size和rate都是固定的
-------------------------------------------------------------------

# ex: sh gen_cbr_traffic.sh src_node dst_node flow_id
# default plt_size=512, rate=1Mb

    src=$1
    dst=$2
flow_id=$3

echo \#flow $flow_id, src $src, dst $dst

# CBR traffic: node 0 -> node 3
#
# set dst1 [new Agent/Null]
# $ns_ attach-agent $node_(3) $dst1
# set cbr1 [attach-cbr-traffic $node_(0) $dst1 512 1Mb]
# $ns_ at 0.001 "$cbr1 start"

echo set dst$flow_id \[new Agent\/Null\]
echo \$ns_ attach-agent \$node_\($dst\) \$dst$flow_id
echo set cbr$flow_id \[attach-cbr-traffic \$node_\($src\) \$dst$flow_id 512 1Mb\]
echo \$ns_ at 0.001 \"\$cbr$flow_id start\"
echo \$ns_ at \$val\(stop\) \"\$cbr$flow_id stop\"

用shell script產生 ns2 multi-channel 的 add-route-tag 語法

用shell script產生 ns2 multi-channel 的 add-route-tag 語法

ex:
sh mc_routing.sh "11 12 13 14 15 16 17 18" "1 2 3 1 2 3 1" 9911


-----------------------------------------------------------------
#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin

# $sh mc_routing.sh "" >  > mc_routing_path

# usage:
# mc_routing.sh 後面加三組參數, 第一組是node的順序, 第二組是依序使用哪張網卡, 第三個是flow_id
#
# ex: sh mc_routing.sh "11 12 13 14 15 16 17 18" "1 2 3 1 2 3 1" 9911
#                       $1, 第一組                $2, 第二組     $3, 第三組

all_node=$1
all_nic=$2
flow_id=$3

# 計算有幾個node
node_num=$(echo $1 | wc -w)

# 輸入node的第一個是source
src_node=$(echo $all_node | cut -d" " -f1)
# 輸入node的最後一個是destination
dst_node=$(echo $all_node | cut -d" " -f$node_num)

# 計算有幾個NIC, 用來判斷兩者數字是否剛好差1, 不然會出錯
# 因為三個三個nodee要傳要傳, 只會用到兩個兩個chh

NIC_num=`expr $(echo $2 | wc -w) + 1`

# node數和網卡數不是差1就跳出
test $node_num -ne $NIC_num && echo "node_num is NOT equal to nic_num" && exit 0

# tcl語法一開始要設定src和dst
#
# $node_(src_no) add-route-tag dst_no flow_id
echo -n "\$node_("
echo -n $src_node
echo -n ") add-route-tag "
echo -n $dst_node
echo -n " "
echo $flow_id

# 從第一個node開始, 然後到倒數第二個node結束.
#for((j=1;j<$node_num;j++)); do
for j in $(seq 1 $(expr $node_num - 1)); do
         node=$(echo $all_node | cut -d" " -f$j);
    next_node=$(echo $all_node | cut -d" " -f$(expr $j + 1));
          nic=$(echo $all_nic  | cut -d" " -f$j);
   
    # ex: 11->12, src=11, dst=18, flow_id=9911
    # $node_(11) add-next-hop 18 9911 12 1
    echo -n "\$node_("
    echo -n $node
    echo -n ") add-next-hop "
    echo -n $dst_node
    echo -n " "
    echo -n $flow_id
    echo -n " "
    echo -n $next_node
    echo -n " "
    echo    $nic
done

在matlab畫node座標 & node編號

以後順便記錄matlab語法好了(?)
要查詢比較方便 XDD
----
[座標檔topo.txt]
x1 y1
x2 y2
x3 y3
以此類推.....

----
[畫圖方式]

close all
clc
[popul]=textread('topo.txt');
num_p = size(popul,1)   % node數

figure(1) ;
plot( popul(:,1),popul(:,2), 'ko') ;    % 把每個node位置畫出來
hold on ;

for i=1:size(popul,1)
    % text(239.53, 123.36, ['  ' num2str(i)])
  
    % 顯示node編號
    text(popul(i,1), popul(i,2), [' ' num2str(i)]);
  
    % 顯示node座標
%    text(popul(i,1), popul(i,2), [' ' num2str(popul(i,1)) ', ' num2str(popul(i,2))]);
end

2015年1月20日 星期二

在ubuntu下, 把txt裡面的windows換行符號改成unix換行符號 (好長的標題啊啊啊啊XD)

最近在windows編輯了一堆txt檔, 然後丟回ubuntu的時候才想到忘了把換行符號改掉. 囧

總共有100個檔案吧, 一個一個開會死人 ˊ_>ˋ

http://stackoverflow.com/questions/13589895/shell-command-to-strip-out-m-characters-from-text-file
然後這上面這個討論, 看到 dos2unix 這個工具!!

直接用apt-get就可以裝了

而且後面直接加檔名, 不需要輸入 output filename, 就直接把那個檔案的換行符號換掉 (好方便XD)

如果有5個檔案, 就可以一次處理完

ex:  dos2unix  file1.txt   file2.txt   file3.txt   file4.txt   file5.txt