【プログラム初心者】シェルでcsvのデータを扱うプログラムを読んで、改造して遊ぼう part2

初心者は改造命Programing
Photo by Luca Bravo on Unsplash

shellでcsvを扱うテクを Sagasoon.
プログラム初心者さんに送る成長の糧シリーズです。
今回は「改造」ということに主眼を置いて進みますね。
前回1回目に続き、2回目です。

1回目がまだの方は、下記の記事をみてください。

【プログラム初心者】シェルでcsvのデータを扱うプログラムを読んで、改造して遊ぼう part1
プログラム初心者さんに送ります。今回は、「csvファイル読み込みプログラムを使って改造しよう」という記事です。初心者の人は、一からプログラムは作らず、誰かのプログラムを改造するところから始めたほうがいいです。「勘」と「洞察」が命。そんな記事です。

今回の「成長の糧」は、プログラムを改造するという「遊び」をしています。

おさらい

前回のおさらいです。
あるWebシステムがあり、そこのアクセスするアカウントの一覧がありました。
一覧は、こんなCSVファイルで表現してました。
id_list.csv

test001,テスト001,テストするときのアカウント1号
test011,テスト011,テスター1号に割り振ったアカウント
test012,テスト012,テスターAさんに割り振ったアカウント

これを、こんなshellのプログラムで、1行ずつ読み出してみましたね。

#!/bin/sh
cat id_list.csv |
while IFS=, read id name biko
do
  echo "$id ($name) :$biko"
done

ちなみに、実行した結果は、こんな結果となりました。

test001 (テスト001) :テストするときのアカウント1号
test011 (テスト011) :テスター1号に割り振ったアカウント
test012 (テスト012) :テスターAさんに割り振ったアカウント

ログファイルを読み込む

さて、今日は、こんなファイルも一緒に考えます。

log.csv

2020-01-01,12:00:12,N,test001,LGIN,
2020-01-01,12:01:12,N,test001,SRCH,商品,マスク ボックス
2020-01-01,12:01:24,N,test012,LGIN,
2020-01-01,12:04:32,N,test012,SRCH,商品,トイレットペーパー
2020-01-01,12:05:42,N,test012,VIEW,SH-12342223
2020-01-01,12:10:34,N,test012,VIEW,SH-12311223
2020-01-01,12:12:54,N,test001,VIEW,SH-22311223
2020-01-01,12:13:01,E,-,LGN,認証に失敗しました。正しいIDとパスワードを指定してください
2020-01-01,12:13:33,N,test021,VIEW,SH-22311223

ログファイルです。
Webサイトを利用した方が、どんな操作をしましたよというのを履歴として残したものです。
ぱっとみると、「LGIN」(ログイン処理)の行などがありますから、ログインしてるなというのは分かりますが、「test001がどんな一連の処理をしたのか?」というのが分かりにくいです。

ユーザごとに見える化する

各ユーザさんがどんな処理をしたかというのが分かると、とても見やすいかもですね。

そしたら、grep コマンドで「フィルター」をかけてみますか。

[user@users001 csv]$ grep test001 log.csv
2020-01-01,12:00:12,N,test001,LGIN,
2020-01-01,12:00:12,N,test001,SRCH,商品,マスク ボックス
2020-01-01,12:00:12,N,test001,VIEW,SH-22311223

ログインした後、マスクとかで商品検索して、閲覧してるんだ

というのが見える化できましたね。

log.csvの中身を1行ずつ読み込んで、「test001」って書いてある行だけを出すっていうコマンドで、それが分かりました。

はい、初心者さん。
こうゆうところで、応用してください。

  • test002ならどうするか?
  • LGINだけを抜き出す場合もあるかな?
  • ある商品をみたユーザを探す場合もあるかな?

その場合は、どうしますかね?考えましょう。

shellに盛り込むには?

grepを使うと、あるキーワードで書かれた行だけを抽出できることが分かりましたね。
そうしたら、csvを読み込むshellを改造して、ユーザ事に出来るようにしてみましょう。

#!/bin/sh
cat id_list.csv |
while IFS=, read id name biko
do
  echo "$id ($name) :$biko"
done

のシェルを改造するわけです。
do~doneの中が、「1行ずつ」の単位で実行されるんですよね?
$id ってのが、ユーザIDが入っている変数でした。
grep コマンドを使うと、ファイルの中から、「フィルター」された行が表示されますね?

ってことは、どう改造しましょう?

shellに盛り込む

どうです?
思いつきましたか?

#!/bin/sh
cat id_list.csv |
while IFS=, read id name biko
do
  echo "--$id-----"
  grep "$id" log.csv
done

です。
grepの前に、echo で、ユーザ名を入れてあげました。
ここから、このユーザの履歴ですよ、っていうのが分かりやすいかなと思いまして。

結果

[user@users001 csv]$ ./csv.sh
--test001-----
2020-01-01,12:00:12,N,test001,LGIN,
2020-01-01,12:00:12,N,test001,SRCH,商品,マスク ボックス
2020-01-01,12:00:12,N,test001,VIEW,SH-22311223
--test011-----
--test012-----
2020-01-01,12:00:12,N,test012,LGIN,
2020-01-01,12:00:12,N,test012,SRCH,商品,トイレットペーパー
2020-01-01,12:00:12,N,test012,VIEW,SH-12342223
2020-01-01,12:00:12,N,test012,VIEW,SH-12311223

ユーザごとにどんな手順で何をしたか、時間を追ってみられましたね。一目瞭然です。

まとめ

いかがでしょうか?
改造しながら、改造する方法や考え方を盛り込みながら、お話を進めてきましたが、何かいいアイデア出てきましたか?
色々なソースをみて、自分のアイデアを少しだけ盛り込むというトレーニング(遊び)は、初心者さんにとって、最高の成長の糧になります。
どうぞ、楽しんでやってみてくださいね。

【プログラム初心者】シェルでcsvのデータを扱うプログラムを読んで、改造して遊ぼう part2
プログラム初心者さんに送ります。今回は、「csvファイル読み込みプログラムを使って改造しよう」という記事です。初心者の人は、一からプログラムは作らず、誰かのプログラムを改造するところから始めたほうがいいです。「勘」と「洞察」が命。そんな記事です。
【プログラム初心者さんに送る成長の種】「不具合探し」は「成功探し」と理解すべき
プログラミング初心者の方々向けの不具合探し虎の巻です。デバッグ作業(不具合解消作業)ってどうも苦手だなと感じる方はぜひ一読くださいませ!
炭酸野郎

今日も何かを Sagasoonを運用してます。炭酸野郎です。
皆さんの「何か」が探せるべく、記事書いてます。
新卒で中堅SIerに就職→10年ちょいで退職→フリーランス→起業。副業としてのブログに目覚める(今ここ)。
時間作って、色々なことがやりたいお年頃です!

炭酸野郎をフォローする
Programingshell初心者IT
炭酸野郎をフォローする
SAGASOON

コメント

タイトルとURLをコピーしました