はじめに
本記事は、Windows端末を使用して、Excelでちょっとしたデータ抽出や集計を行っている場合、劇的に時短を行うためのTipsになります。
ITエンジニアとして仕事をしていると、システムから採取した何らかのログ等を使用して、集計を行ったりすることがあると思います。SIer業界で働くITエンジニアの場合、基本的に作業端末はWindowsを使用している方が多いのではないでしょうか。
実際の業務として、何らかの集計を行う場合、Excelを使用している方がほとんどだと思いますが、WSLを活用することで時短ができます。マクロは不要です。
シチュエーション
例えば、とあるシステムがあったとして、日時で何らかのログ(CSVのデータ)が出力されているとします。このログを1ヶ月分採取して、特定のエラーメッセージが日に何件出力されているか、また月の合計を求めることになった場合、どうしましょう。1個ずつCSVファイル開いて、中身をコピーして別ファイルに保存しますか?それとも、マクロ書きますか?
また、圧縮などが行われて、各フォルダ配下にファイルが生成されていたりすると、めんどくさいですね。。
そんな時は、WSLを使いましょう!
WSLって何?という人は、以前、書いたWSL(Windows Subsystem for Linux)を使ってみたを参考に、インストールしてください。
以下は、上記シチュエーションを解決するためのシェルです。
Windows端末上のWSLにログインし、集計データがあるディレクトリに移動して、当シェル実行すれば一発で終わります。
- totaling.sh
#!/bin/bash
## 検索対象とするファイルを設定し、配列に追加
target_file=^201902.*csv$
list=()
for i in `ls | grep ${target_file}`;do list+=(${i}); done
length=${#list[@]}
if [ ${length} -eq 0 ]; then
echo ' *---------------------------------------------------------*'
echo ' * 検索対象のファイルが存在しないため、処理を中止します *'
echo ' *---------------------------------------------------------*'
echo ''
exit 1
else
echo ' *---------------------------------------------------------*'
echo ' * 以下のファイルが検索対象になります *'
echo ' *---------------------------------------------------------*'
echo ''
for i in ${list[@]};do echo ${i}; done
fi
## 出力用ファイルを設定
output_file=test.csv
## 検索するキーワードを設定
keyword="err"
## 複数条件 orで検索したい場合
#keyword='キー\|キー'
log_search() {
for i in ${list[@]}
do
grep -r "${keyword}" ./${i} --exclude=${output_file} >> ${output_file}
done
}
if [ ! -e ${output_file} ]; then
log_search
else
echo ' *---------------------------------------------------------*'
echo ' * ファイルが存在するため、処理を中止します *'
echo ' *---------------------------------------------------------*'
echo ''
exit 2
fi
## 集計するためにcsvから取り出すフィールドをcountに設定
count=2
echo ' *---------------------------------------------------------*'
echo ' * 集計処理を行います *'
echo ' *---------------------------------------------------------*'
echo ''
cat ${output_file} | cut -d "," -f ${count} | uniq -c
実践
例として、以下のようなCSVファイルがあるとします。
このCSVファイルは"番号","日","時間", "メッセージ"が出力されています。
それぞれのCSVファイルに出力された、日毎に発生した特定のエラーメッセージを、時系列に1ファイルに出力して、集計処理の結果を出力します。
2月27日は1件、2月28日は6件のエラーメッセージが確認できました。
また、出力されたtest.csvファイルには、日毎に発生した特定のエラーメッセージが、時系列に1ファイルに出力されたのがcatコマンドで確認できます。
おわりに
今回は例として、2個のファイルで集計しました。これぐらいだったらExcelと大差ありませんが、対象ファイルの数が多い場合は効果を発揮します。また、集計処理は、cutコマンドを使用していますが、awkコマンドでも同じことできます。ただ、実際に業務で扱うデータというのは、データ抽出しにくい状況があるので、そういったときは、wcコマンドなどを上手く使うとよいでしょう。
重要なのは、Windows端末なのでExcelで作業するという固定観念を破壊して、新しいやり方を見出すことです。WSLが使用できるということは、Windows端末でLinuxのコマンドが実行できるということです。ファイルを検索する場合も、findコマンドで探したりすることができます。
本記事が、Windows端末で業務を行うITエンジニアの役にたてれば幸いです。