Help us understand the problem. What is going on with this article?

めんどくさいことはWSLにやらせよう

はじめに

本記事は、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ファイルは"番号","日","時間", "メッセージ"が出力されています。

excel.png

それぞれのCSVファイルに出力された、日毎に発生した特定のエラーメッセージを、時系列に1ファイルに出力して、集計処理の結果を出力します。

wsl.png

2月27日は1件、2月28日は6件のエラーメッセージが確認できました。
また、出力されたtest.csvファイルには、日毎に発生した特定のエラーメッセージが、時系列に1ファイルに出力されたのがcatコマンドで確認できます。

おわりに

今回は例として、2個のファイルで集計しました。これぐらいだったらExcelと大差ありませんが、対象ファイルの数が多い場合は効果を発揮します。また、集計処理は、cutコマンドを使用していますが、awkコマンドでも同じことできます。ただ、実際に業務で扱うデータというのは、データ抽出しにくい状況があるので、そういったときは、wcコマンドなどを上手く使うとよいでしょう。

重要なのは、Windows端末なのでExcelで作業するという固定観念を破壊して、新しいやり方を見出すことです。WSLが使用できるということは、Windows端末でLinuxのコマンドが実行できるということです。ファイルを検索する場合も、findコマンドで探したりすることができます。

本記事が、Windows端末で業務を行うITエンジニアの役にたてれば幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした