はじめに
変態ワンライナーシェル芸人を目指す私が,ああこれどうやって書くんだっけ,という時に見るやつ.いつか整理する.この世の全てをパイプで繋ぎたい.
よくcで書いて出てきたログファイルをshellで処理しています.
ファイルが存在していたら削除
non-oneline.sh
if [ -f hoge.log ]; then
rm hoge.log
fi
oneline.sh
test -f hoge.log && rm hoge.log
変数を使い回す時に四則演算する
cのdefineで設定する定数をshell側でも使い回したい時がある.しかも,四則演算したい時がある.1引きたいとか.
例えば,100回のイテレーションをcで回して,出てきた100回分の生データをshell側でforループで回して処理したい.この時,shell内で変数を0-99の間で動かしたい.みたいな.うまく説明できない.
結論,exprは遅いので,$((...))を使いましょう,という話.
analyze.sh
NUM_ITERATION="100"
gcc -DNUM_ITERATION=${NUM_ITERATION} -o ./simulation ./simulation.c
./simulation > ./raw.log
for i in `seq 0 $((NUM_ITERATION -1))`; do
grep "episode ${i}" ./raw.log | awk '{hoge}'
done
grepでAND/OR
ANDは直感通り,ORはいっつも忘れちゃう.
letsgrep.sh
# grep de AND
cat file.log | grep "hoge" | grep "fuga"
# grep de OR
cat file.log | grep -e "hoge" -e "fuga"