bashのブレース展開で連番のファイルを作成
bashではブレース展開を用いることで、連番のファイルを作成することが出来る
{<開始>..<終了>}
例1 001.txtから020.txtまでを作成
$ touch {001..020}.txt $ ls 001.txt 003.txt 005.txt 007.txt 009.txt 011.txt 013.txt 015.txt 017.txt 019.txt 002.txt 004.txt 006.txt 008.txt 010.txt 012.txt 014.txt 016.txt 018.txt 020.txt
例2 A-Zまで表示
$ echo {A..Z} A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Pythonのデコレータ
作成した関数を書き換えずに、その関数の働きに変更を加えたい時、デコレータを用いることができる。 デコレータとは、入力として関数(変更を加えたい関数)を取り、出力として別の関数(変更を加える関数)を取る関数のことである。
具体例
引数として取ったふたつの数の和を返す関数add()があったとする。
def add(a,b): return a+b >>> add(3,4) 7
この関数を、中身を書き換えずに、"引数として取った二つの数の和の自乗"を返すようにしたい(つまり3と4を入れると72の49を返すようにする)。
ここで、デコレータを用いる。
デコレータは、引数として取った関数に対して処理を行う別の関数を定義し、その別の関数を返す。
def square(func): def new_func(*args,**kargs): result = func(*args,**kargs) return result ** 2 return new_func
作成したデコレータで関数を修飾するには、修飾したい関数の定義の直前に@<デコレータ名>とすればよい
@square def add(a,b): return a+b >>> add(3,4) 49
TensorFlowで乱数生成
一様分布
random_uniform関数を用いて一様に分布する乱数を生成する サンプル
#coding:utf-8 import tensorflow as tf #100次元、0から10まで一様に分布する不動少数点型の変数を作成 uniform = tf.random_uniform( \ [100],minval=0,maxval=10,dtype=tf.float32) sess = tf.Session() with tf.Session() as session: print uniform.eval()
正規分布
random_uniform関数を用いて正規分布する乱数を生成
#coding:utf-8 import tensorflow as tf norm = tf.random_normal([100],mean=0,stddev=10) with tf.Session() as session: print norm.eval()
シェルスクリプト覚え書きその2 制御構造編
条件分岐
- if文
例:ひとつ目の引数が1ならYES,そうでないならNOと出力
#!/bin/bash if [ "$1" = "1" ] ;then # [,],=の前後にスペースが必要 echo "YES" else echo "NO" fi
比較
文字列の比較
str1 = str2
str1とstr2が等しい
str1 != str2
str1とstr2が等しくない
-n str1
str1が空
-z str1
str1は空ではない整数の比較
int1 -eq int2
int1 == int2
int1 -ne int2
int1 != int2
int1 -lt int2
int1 < int2
int1 -le int2
int1 <= int2
int1 -gt int2
int1 > int2
int1 -ge int2
int1 >= int2
例:2つの引数のうち小さい方を表示する
if [ "$1" -le "$2" ];then echo $1 else echo $2 fi
- case文
<文字列>が<パターン>に一致する場合に処理を実行して抜ける
case <文字列> in <パターン1>) 処理 ;; <パターン2>) 処理 ;; esac
繰り返し
- for文
for文を用いるとリストの各要素について順番に処理を行うことが出来る
for <変数名> in <リスト> do 繰り返す部分 ここではリストの各要素が変数名で参照できる done
例 001.txtから005.txtまでの5つのファイルを作成*1
#!/bin/bash for n in $(seq 1 5) do touch "00$n.txt" done
- while文
<条件>が真である(終了ステータスが0である)間は繰り返し処理を行う
while <条件(コマンド)> do 繰り返し処理 done
例:無限ループ
一秒ごとにhogeと言う
#!/bin/bash while : do echo hoge sleep 1 done
*1:実際にはブレース展開のほうが便利 katorinax.hatenablog.com
シェルスクリプト覚え書き シェル変数と引数 編
変数関連
- 変数の定義
file=/media/usr-name/
変数名に使えるのは アルファベット、数字、アンダースコアのみ
- 変数の参照
変数の値を参照する際には、変数名の前に$
をつける。
echo $file /media/user-name/
コマンド置換
コマンド置換を利用することで、コマンドの吐いた標準出力を文字列として取得することが出来る。
コマンド置換:$(<コマンド名>)
例 シェル変数filenameに、現在時刻を代入する
$ filename=$(date|tr ' ' '_') $ echo $filename Mon_Apr__3_14:30:20_JST_2017
コマンドライン引数を用いる
位置パラメータというシェル変数を用いることで、シェルスクリプトにコマンドライン引数を導入できる
- 位置パラメータ
$ ./hoge.sh aaa bbb
と引数付きでシェルスクリプトを実行した際、
“./hoge.sh"は$0 "aaa"は$1 "bbb"は$2というシェル変数に格納される
引数の個数(この場合は2つ)は$#、引数全体(この場合はaaa bbb)は$@というシェル変数に格納される # 具体例
位置パラメータを表示するシェルスクリプト param.sh
#!/bin/bash echo $0 echo $1 echo $2 echo $3 echo $# echo $@
実行
$ sudo chmod +x param.sh $ param.sh aaa bbb ./param.sh # $0 aaa # $1 bbb # $2 # $3(無い) 2 # $#(引数の数) aaa bbb # $@(すべての引数)
sedの使い方
sed はストリームエディタの略
vimやEmacs,メモ帳と言った対話型エディタとは異なり、ストリームエディタはファイルを加工して結果を標準出力に書き出す。
-i オプションで上書きする。
- 行を指定して削除
$ sed <数字>d ファイル名
でファイルの<数字>行目を削除できる
例1:1行目を削除$ sed 1d hoge.txt
例2:3から10行目を削除$ sed 3,10d hoge.txt
正規表現を指定に用いることも出来る。
この場合、正規表現をスラッシュで囲む。
例3:先頭がAで始まる行を削除$ sed /^A/d hoge.txt
- 行を指定して表示
$ sed -n <数字>p ファイル名
でファイルの<数字>行だけを出力できる
- 文字列を指定して置換
$ sed s/<置換前>/<置換後>/フラグ ファイル名
でファイルの<置換前>文字列を<置換後>文字列に変換できる
置換前文字列には正規表現を用いることが出来る
フラグにはgを指定すると見つかったすべての文字列を置換できる