###前提・実現したいこと
シェルスクリプトで、SQLが記載されたあるログファイルから各SELECT文の割合を算出したいです。
簡易的な割合のため、where句以降は省略してユニーク化させています。
仕組みとしては、ログファイルのSELECT文をユニーク化し、それを元にログファイルから各SELECT文の割合を算出したいと思っています。
###期待する結果。
#例 <SQL>,<行数>
SELECT cid, name, address FROM test1;,3
SELECT class, school FROM test2;,3
SELECT company, train, station FROM test3;,3
上記のような形で、対象のSQLとそのSQLがファイル内に存在する行数が表示されるようにしたいです。
###発生している問題・エラーメッセージ
セミコロンを区切り文字にしているのでクエリ毎に変数へ格納できているのですが
grepがうまくいかず、wc -lの結果で全行が返ってきてしまいます。
grep内の変数をダブルクォーテーションでくくってみた入りもしましたがうまくいきませんでした。(スペースがあるからでしょうか…
###ソースコード
使用例:./test.sh(以下のスクリプト) <ログファイル>
bash
1#!/bin/bash 2IFS_BACKUP=$IFS 3IFS=$';' ←セミコロンで区切り、for文の変数に格納しています。 4for n in $(sort ${1} | uniq | grep -i select | awk -F'\t' '{print $ 3}') 5do 6 echo "${n},$(grep ${n} ${1} | wc -l)" 7done 8IFS=$IFS_BACKUP
### ログファイル 1 162015 SELECT cid, name, address FROM test1; 2 162015 SELECT class, school FROM test2; 3 162015 SELECT company, train, station FROM test3; 1 162015 SELECT cid, name, address FROM test1; 2 162015 SELECT class, school FROM test2; 3 162015 SELECT company, train, station FROM test3; 1 162015 SELECT cid, name, address FROM test1; 2 162015 SELECT class, school FROM test2; 3 162015 SELECT company, train, station FROM test3;
###補足情報(言語/FW/ツール等のバージョンなど)
OS:CentOS6.7
回答4件
あなたの回答
tips
プレビュー