function printerr(message){ #print message,record number and record print "ERROR:" message " (" NR ") " $0 | "cat 1>&2" } # 文字列の挿入 function insert(str,pos,ins){ return substr(str,1,pos) ins substr(str,pos+1) } # 文字列の削除 function erase(str,pos,len){ return substr(str,1,pos-1) substr(str,pos+len) } # 文字列の繰返し function repeat(str,time, i,ret){ for(i=1;i<=time;i++){ ret=str ret; } return ret; } # 文字列の裏返し function reverse(str, i,ret){ for(i=1;i<=length(str);i++){ ret=substr(str,i,1) ret; } return ret; } # 10進アスキーコード function ascii(char, ascii_str){ ascii_str=" !\"#$%&'()*+,-./0123456789:;<=>?@"; ascii_str=ascii_str "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`"; ascii_str=ascii_str "abcdefghijklmnopqrstuvwxyz{|}~"; return 31+index(ascii_str,char) # 32から126まで } # 文字の置換 function exch(str,old,new, i,char,po,ret){ for(i=1;i<=length(str);i++){ # strの長さで繰り返し char=substr(str,i,1); po=index(old,char); if (po == 0){ ret=ret char; # そのまま連結 } else{ ret=ret substr(new,po,1); # 置換して連結 } } return ret; } # カラー文字列 function strcolor(str,color){ return sprintf("\033[" color "m%s\033[0m",str); } # 4 アンダーライン # 7 リバース # 30 黒 # 31 赤 # 32 緑 # 33 黄 # 34 青 # 35 マゼンタ # 36 シアン # 37 白 # (40ー47は30ー37の反転) # 大文字を小文字へ変換 function lower(str){ gsub("A","a",str); gsub("B","b",str); gsub("C","c",str); gsub("D","d",str); gsub("E","e",str); gsub("F","f",str); gsub("G","g",str); gsub("H","h",str); gsub("I","i",str); gsub("J","j",str); gsub("K","k",str); gsub("L","l",str); gsub("M","m",str); gsub("N","n",str); gsub("O","o",str); gsub("P","p",str); gsub("Q","q",str); gsub("R","r",str); gsub("S","s",str); gsub("T","t",str); gsub("U","u",str); gsub("V","v",str); gsub("W","w",str); gsub("X","x",str); gsub("Y","y",str); gsub("Z","z",str); return str; } # 小文字を大文字へ変換 function upper(str){ gsub("a","A",str); gsub("b","B",str); gsub("c","C",str); gsub("d","D",str); gsub("e","E",str); gsub("f","F",str); gsub("g","G",str); gsub("h","H",str); gsub("i","I",str); gsub("j","J",str); gsub("k","K",str); gsub("l","L",str); gsub("m","M",str); gsub("n","N",str); gsub("o","O",str); gsub("p","P",str); gsub("q","Q",str); gsub("r","R",str); gsub("s","S",str); gsub("t","T",str); gsub("u","U",str); gsub("v","V",str); gsub("w","W",str); gsub("x","X",str); gsub("y","Y",str); gsub("z","Z",str); return str; } # 10進数から16進数へ function d2x(x){ return sprintf("%x",x); } # 10進数から8進数へ function d2o(x){ return sprintf("%o",x); } # 16進数から10進数へ # 注意:引数は文字列 function x2d(x, i,ret){ _HEX["a"]=10; _HEX["A"]=10; _HEX["b"]=11; _HEX["B"]=11; _HEX["c"]=12; _HEX["C"]=12; _HEX["d"]=13; _HEX["D"]=13; _HEX["e"]=14; _HEX["E"]=14; _HEX["f"]=15; _HEX["F"]=15; for(i=length(x);i>0;i--){ ret+=_HEX[substr(x,i,1)]*16^(length(x)-i); } return ret; }