awk を使ったデータフィルター処理
魔術師です。昨日は週末だと言うことで少し飲み過ぎたようです。キンミヤ焼酎をホッピーを最近気に入っている果汁のみで添加物なしのキリンの「本搾り」ワーファリンは飲んでないのでグレープフルーツでも大丈夫と言うことでグレープフルーツを飲みました。生のフルーツならではの果汁感がこのシリーズは素晴らしいです。そのあと黒霧島を 200ml 飲んでいつもは 100ml ですが、週末だし少し多かったかも知れません。飲んですぐにパタッと寝てしまいました。朝起きて頭がガンガンするのは風邪なのか?二日酔いか?一昨日になりますが、パートナーの仕事のシフトに関して毎月データを送ってもらっているのですがGoogle カレンダーに取り込むためにエディターで正規表現を使って加工していました。だけど面倒くさいのでプログラム一発で加工したいけど、こんなものにガッツリプログラムを組みたくない。だったらスクリプト系のプログラムだよねとはずっと思っていたのです。思っているだけで全然動いていなかったのですが、今月のデータをもらったのでちょっとがんばってスクリプトを組みました。行処理なので awk だよなあと思っていたのですが、sed ではきっと力不足、Perl 使いなら悩まないのでしょうけど使いこなせてない今なら AI 処理も出来る Python でしょうがイチから勉強しないといけない。と言うことでスクリプト系の言語の awk にしました。元データ----------10月の勤務表を送ります1日(木)・・夜勤2日(金)・・明け3日(土)・・休み・・・----------加工後のカンマ区切りデータ----------Subject,Start date,All Day Event夜勤,2020/10/1,true明け,2020/10/2,true休み,2020/10/3,true・・・----------使っていた正規表現これを([0-9]+).*・・(.*)これに文字列置き換え\2,2020/10/\1,true正規表現ではパターンにマッチした行の一部を切り出して再利用が出来るのです。文字列変換していましたが月のデータは最初に出てくるので取り込んでデータとして使いたいなあと思っていました。だけど単なる文字列変換では不可能です。それと awk の処理系をどれを使うかが問題です、ちゃんと日本語が使える awk にしないといけませんMS-DOS 時代の jgawk が定番だけど、16ビットのソフトだよね。Linux 上で処理すればここで悩まなくていいので WSL2 を使うか Raspberry Pi に転送して処理するかとも思ったけど転送の手間がかかるのでボツ普段使っている busybox-w32 の中に含まれている awk を使ってみました。busybox-w32https://frippery.org/busybox/日本語が化けて通らないと思ったら元のデータファイルが UTF-8 で保存されていたのでした。SJIS 変換して通すと綺麗に通りました。単なる変換だけでなく12月に翌年1月のデータを処理する場合と、12月分のデータには翌年の 1月のデータも一部追加される場合もあるので対応しました。システム日付とデータ日付を比較して翌年のデータになるように計算しました。calconv.awk スクリプト----------#!/usr/bin/awkBEGIN { print "Subject,Start date,All Day Event" month=1; year=strftime("%Y"); todays_month=strftime("%m"); l=0;}# ([0-9]+).*・・(.*)# \2,2020/1/\1,true/[0-9]+月/ { sub("月の.*$","",$0); month = $0;# print month; if ( todays_month == 12 ) { if ( month == 1 ) { year = year+1; } }}/[0-9]+日.*・・/ { l = l+1# printf "$2,2020/1/$1,true\n" sub("日", " ", $0); sub("・・", " ", $0); day=$1 if ( l > 31 && month == 12 ) { year = year + 1; month=1; l=0; } printf("%s,%d/%d/%d,true\r\n", $3, year, month, day );}----------大満足の出来です。今まで月に 1回のことだからとエディターで文字列変換していまいしたが、これからは自動で処理出来ます。早期処理の同期が終わらないUSB オーディオインターフェースの問題でマシンを初期状態に巻き戻したので複数マシンのデータ同期ソフトの最初の同期処理が未だに終わりません。多量のデータがあるからだけど終わりそうになると再起動が必要になって初めからやり直しになっています。データ転送はないのですが持っているデータとの差分チェックに時間が掛かっています。夜に再起動したので一晩で 98% 今日終わればいいな。オクで落札したカセットデッキですが、出品者から連絡があったので一安心なのですが、着払いで送らないといけません。梱包しないといけないし、引き取り依頼をかけないといけないので面倒くさいです。これをしたくないからオクには出品しないのですけどね。カセットデッキが使えなくなったので別宅に行って外付け dbx ユニットを持って来るのと別宅のマシンが不調で立ち上がらないので様子を見に行こうかと思います。追加でごぼうスティックを仕入れましょうか。人気記事の一覧のあるトップへ楽天のサービス紹介ページへ飛ぶ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。