nanahara.log

プログラミング関係のノート

調査用シェル操作 初歩の初歩

調査用シェル操作周りの覚え書き。 凄まじく圧倒的に初歩的だけど、オプションとか抜けるので備忘目的...

grep, cut, sort, uniq, awk, sed辺りで簡単な要件であれば概ねカバーできる 。 各解説は抜きなので気になることはmanへ。

grep

grep 'target' sample.log  
# -c : マッチした行数を表示
# -e : 正規表現使う
# -i : 大文字小文字を区別しない
# -o : マッチした文字のみ表示
# -v : マッチしなかった行を表示
# --color=auto : マッチした文字の色変更

cut

cut -d ','  -f 2 sample.log 
# -f : フィールドの指定
# -d : 区切り文字の指定 

sort

sort -t, -k2,2 -k3,3n sample.log
# -t : 区切り文字の指定
# -k : フィールドの指定
# -n : 数値でソートする
# -r : 逆順
# [0-9]n : 数値基準

awk

cat sample.log | awk -F'\t' '  { print $3 }' 
# awk 'pattern { action }'
# awk '/aaa/ { action }' : patternに正規表現
# awk 'BEGIN{ print "start" } { action } END{ print "end" }' : 読み込む前と後
# -F : 区切り文字の指定

(参考) http://d.hatena.ne.jp/zariganitosh/20131209/minimum_awk

Sample & Tips

# パラメータをループで渡す
for target_id in $(seq -w 1 9); do bash ./script.sh $target_id ; done

# n行目に文字を加える
cat sample.log | awk -F, -vOFS=, '{$2=$2",aaa"; print $0}' > sample_added.log;

# MySQLの結果について、改行を変換
mysql -e "select master_id from history " -Ns | sed -e ':loop; N; $!b loop; s/\n/,/g'

# MySQLの結果について、改行を変換。簡単だけど、こっちだと最後の1行の後にもカンマが入る
mysql -e "select master_id from history " -Ns | tr '\n' ','

参考

http://d.hatena.ne.jp/Yamashiro0217/20120727/1343371036