2024年1月28日 星期日

正規化表示

https://ithelp.ithome.com.tw/articles/10251882 Day 25 正規化表示 在做搜尋條件的時候,有時候想找尋某個檔案,但只記得他的內容關鍵字,這時候正規表示法就非常方便,下關鍵字達到找尋最接近的結果。 grep 全名為 global regular expression print。 [root@localhost ~]# grep [參數] [關鍵字] [檔案或目錄] 參數 -A [行數] (After)顯示符合的那一行,同時顯示該行之後的內容。 -a 以二進位的檔案作為搜尋。 -B [行數] (Before)顯示符合的那一行,同時顯示該行即之前的內容。 -b 顯示符合條件的結果,總共多少 bytes。 -C [行數] (Context)顯示符合的那一行及前後內容。 -c 顯示符合條件的總行數。 -d [動作] 查詢目錄(忽略檔案)。 -E (Extend)使用正則表示式搜尋。 -e [符合條件的內容] 指定搜尋的檔案,通常用在避免partern用-開始。 -F 符合條件的內容作為固定字串的列表。 -f [範本檔案] 指定符合條件的內容,並且將每一行套用樣式。 -G 將樣式視為基本的正規表示法。 -H 在每個符合樣式的行,前面加上符合的檔案名稱或路徑。 -h 同 -H ,但輸出不顯示路徑。 -i (ignore case)不區分大小寫。 -L 不符合條件內容的檔案名稱。 -l 符合條件內容的檔案名稱。 -n (number)顯示符合條件的行數及路徑。 -o 顯示被模式比對到的條件。 -q 不顯示任何結果。 -r 遞迴,讀取每個目錄底下的檔案,同 -d recsuse。 -s 不顯示錯誤訊息或無法讀取的訊息。 -V (Version) 顯示 grep 版本資訊。 -v (recursive)顯示不符合條件的結果。 -w 只顯示文字完全符合的結果。 -x 只顯示全列都符合的列 --help 尋求幫助。 正規表示法特殊字符 正規表示法中的特殊符號,與原意思不相同,他們都有各自使用方式。 特殊符號 說明 ^ 搜尋規則前的「起頭」。意思代表「非」。 $ 搜尋規則後的「結尾」。 . 任意一個字元。 * 任意字元或任意字串,長度可以為0 .* 一起使用代表任意字串。 跳脫字符,將字串中特殊符號的動作去除。 + 一個或多個重複字元 ? 匹配正則表達式的結束行 (n,m) 連續 n 個 到 m個的字串。 < 從比對正則表達式的行開始。 > 到比對正則表達式的行結束。 [] 比對範圍內的字元或字串。 [^] 比對不再指定範圍內的字元。 [-] 範圍 ;如[A-Z]即A,B,C一直到Z都符合要求 國際模式比對字符 特殊符號 代表意義 [:alnum:] 英文大小寫字元及數字,亦即 0-9, A-Z, a-z [:alpha:] 任何英文大小寫字元,亦即 A-Z , a-z [:blank:] 空白鍵與 [Tab] 按鍵兩者 [:cntrl:] 鍵盤上面的控制按鍵,亦即包括 CR, LF, Tab, Del.. 等等 [:digit:] 數字而已,亦即 0-9 [:graph:] 除了空白字元 (空白鍵與 [Tab] 按鍵) 外的其他所有按鍵 [:lower:] 小寫字元,亦即 a-z [:print:] 任何可以被列印出來的字元 [:punct:] 標點符號 (punctuation symbol),亦即:" ' ? ! ; : # $... [:upper:] 大寫字元,亦即 A-Z [:space:] 任何會產生空白的字元,包括空白鍵, [Tab], CR 等等 [:xdigit:] 16 進位的數字類型,因此包括: 0-9, A-F, a-f 的數字與字元 實際操作 多檔案或目錄搜尋 [root@localhost ~]# grep [參數] [關鍵字] [檔案或目錄1] [檔案或目錄2] [檔案或目錄3] ... 搜尋的關鍵字,以顏色特別標註 --color [root@localhost ~]# grep [參數] [關鍵字] --color [檔案或目錄] 遞迴尋找 root 目錄下的檔案,須符合 美女的字串。 [root@localhost ~]# grep -r "美女" /root/ /root/demo.sh: echo "美女您好"

2023年9月20日 星期三

calculate_sigma

#!/usr/bin/perl
$input_library = $ARGV[0];
$timing_flag=0; $timing_type_flag=0; $get_value_flag=0; $table_count=0;

open(LIB,"<$input_library");
open(NEW, ">hold_sigma.lib") || die "Can not open the file : temp.txt \n";

while(<LIB>){
      print NEW "$_";
      chop $_;
      $table_count++;
      #if(/timing \(\) {/){
  #    #  $timing_flag=1;
  #        #  print "$_ \n";
  #            #}
  #
    if(/timing_type : hold_rising/ || /timing_type : hold_falling/){
        $timing_type_flag=1;
#print "$_ \n";
}
if(/values \( / && ($timing_type_flag=="1")){
$get_value_flag=1; $timing_type_flag=0;
$table_count=0;
#print "$_ \n";
}
    if($get_value_flag==1 && $table_count>0){
        #print "start to get values: $table_count\n";
$_ =~ s/", \\//; $_ =~ s/" \\//; $_ =~ s/"//; $_ =~ s/,//g; #removed unnecessary symbols
@ary=split(" ",$_);
for ($i=0; $i<5; $i++) {
$table_array[(($table_count-1)*5)+$i]=$ary[$i];
}
#print NEW "$_\n";
if($table_count>79){
$table_count=0; $get_value_flag=0; $timing_type_flag=0;
#print NEW @table_array; print NEW "\n";
print NEW "ADD sigma table\n";
for ($j=0; $j<25; $j++) {
$sigma=((($table_array[125+$j]**2)+($table_array[175+$j]**2)+($table_array[225+$j]**2)+($table_array[275+$j]**2)+($table_array[325+$j]**2)+($table_array[375+$j]**2))**0.5);
print NEW "$sigma ";
if((($j+1)%5)=="0"){print NEW "\n";}
}
print NEW "\n";
}
}
}
close(LIB);
close(NEW);

######################################################################

#!/usr/bin/perl                                                                                                                                                                                                    

# input file cell.ldb 
# output add on sigma for mpw

$input_library = $ARGV[0];
$timing_flag=0; $timing_type_flag=0; $get_value_flag=0; $table_count=0;

open(LIB,"<$input_library");
open(NEW, ">mpw_sigma.ldb") || die "Can not open the file : temp.txt \n";

while(<LIB>){
      print NEW "$_";
          chop $_;
              $table_count++;
                  #if(/timing \(\) {/){
                  #    #  $timing_flag=1;
                  #        #  print "$_ \n";
                  #            #}
                  #
    if(/timing_type : min_pulse_width/){
            $timing_type_flag=1;
            #print "$_ \n";
            }
    if(/values \( / && ($timing_type_flag=="1")){
    $get_value_flag=1; $timing_type_flag=0;
    $table_count=0;
    #print "$_ \n";
    }
    if($get_value_flag==1 && $table_count>0){
            #print "start to get values: $table_count\n";
            $_ =~ s/", \\//; $_ =~ s/" \\//; $_ =~ s/"//; $_ =~ s/,//g; #removed unnecessary symbols
            @ary=split(" ",$_);
            #save 5X1 values into a array
            for ($i=0; $i<5; $i++) {
            $table_array[(($table_count-1)*5)+$i]=$ary[$i];
            }
            #print NEW "$_\n";
            if($table_count>15){
            $table_count=0; $get_value_flag=0; $timing_type_flag=0;
            #print NEW @table_array; print NEW "\n";
            print NEW "ADD sigma table\n";
            for ($j=0; $j<5; $j++) {
            $sigma=((($table_array[25+$j]**2)+($table_array[35+$j]**2)+($table_array[45+$j]**2)+($table_array[55+$j]**2)+($table_array[65+$j]**2)+($table_array[75+$j]**2))**0.5);
            print NEW "$sigma ";
            $sigma_plus_nominal[$j]=($sigma*3)+($table_array[15+$j]);
            #if((($j+1)%5)=="0"){print NEW "\n";}
            }
            print NEW "\n";
            print NEW "ADD 3sigma+nominal table\n";
            for ($k=0; $k<5; $k++) {
            print NEW "$sigma_plus_nominal[$k] ";
            }
            print NEW "\n";
        }
    }
}
            
        close(LIB);
        close(NEW);               

2023年8月24日 星期四

AWK

1. 用","當作分隔,取出某一欄位
 cat *.csv | awk -V FS="," '{print $11}'

2. 比較某一欄的值是否大於或小於某個值
使用方法: cat *.txt | awk -f max.awk

BEGIN {
    max = 0.005;
    min = -0.005;
    FS="[,]";
    }
    {
if (FNR > 1) {
    if ($11>max) {
        # print NR;  -->印出行號
        print $0; -->印出該行內容
            }
    if ($11<min) {
        # print NR;
        print $0;
            }
}
}
END {
    printf("max = %f min = %f ", max,min);

3. grep comparison results 
grep -A 2 Pass */*diff.cmp.txt | grep % | awk -F "|" '{print $5}' | xargs



2023年8月11日 星期五

vimdiff


摺疊的命令:
zo : open fold
zc : close fold
zr : reducing folding level
zm : more folding level
zR : reduce completel folding
zM : fold Most

重新計算diff :
:diffupdate or :diffu

同步滾動:
:set scrollbind
:set noscrollbind


2023年6月26日 星期一

Check spike current for CCST waveform

 #! /usr/local/bin/perl 

### input all simulation waveforms then export values which have spike current
### generate a shell script (check_waveform.sh) to plot waveforms in gnuplot for examination

open (AA, "ls analyze_ccs/*/*/*/waveforms/waveform simulation.txt |") or die;
    while (<AA>){
        chomp;
        push @libs, $_;
        }
close AA; 

$out = "check_waveform.sh";
open (BB,">$out") or die;
foreach $lib (@libs){
    open (AA, $lib) or die;
    #print "file: $lib ";
    $i=0; $previous_current=le-8; $present_current=le-8;
    #$dir=`basename $lib`;
    $dir=`dirname $lib`;
    chomp($dir);
    #print "dir path is $dir \n";
    while (<AA>){
        chomp;
        if ($i>"1"){
            @current=split(" ",$_);
            $present_current=$current[1];}
        if ($i=="2"){
            $previous_current=$current[1]; $present_current=$current[1];}
$rel_diff=abs($previous_current/$present_current) ;
#print "Rel diff is $rel_diff , previous is $previous_current , present is $present_current \n";
#export waveform values which have large differences (X10000)
        if ($rel_diff > 10000 || $rel_diff < 0.0001){
            print "file: $lib has spike at line $i, Rel diff is $rel_diff, previous is $previous_current, present is $present_current\n";
            $time_axis=$current[0]+le-10;
            print BB "sed -i '/set datafile missing/i";
            print BB "set xrange [0:$time_axis]";
            print BB "gnuplot $dir/gnuplot.cmd\n";
            print BB "gnuplot $dir/gnuplot.cmd\n";
            }
        $previous_current=$present_current ;
        $i++;
        }
close AA; 
}
close BB;

2022年2月12日 星期六

ETF實戰週記

 0050的進場時機

各位一定要先有兩個認知:
大盤日 K<20買K>80賣
空頭市場(大盤跌破季線超過一個月)大盤日 K<10買K>70賣

時間管理入門

 1.今天就開始您餘生的第一天。

2.時間管理是:控制自己的時間與工作,而不是讓它們控制自己
3.誰有清晰的目標,並追求它,也就能將他的潛能在實際行動上發揮出來(自我鼓勵與自我規律)。目標有助於將力量匯聚在眞正的重點上。問題不在於您作什麼事,而在您爲什麼做那些事情。設定目標是時間管理成功的先決條件與秘訣。
4.您必須嚴肅地把您的行事曆冊,您要
。設定優先順序
。化繁爲簡
。授權。
其餘的事必須順延、取消或加班處理。
5.如果一件事轉載記錄了很多次,將會造成困擾。這時有兩種可行性:
逮住它,現在就把它解決。
取消它,因爲已經没事了。
6.檢查《授權規則〉(快速分析法)
該作什麼?(內容)
誰該作?(人)
為什麼他該作?(動機,目標)
他該怎麼作?(範圍,細節)
什麼時候他該完成?(時限)

標籤