Windows10でも awk/sed が使いたいと思ったときのBusyBox


2020/02/02

唐突ですが、皆さんは
BusyBoxなるツールソフトをご存じでしょうか。

このソフトを利用すると、最低限Linuxで動作するユーティリティコマンド群をインストールもなしにお手軽にwindowsでも利用できるようになります。

そんな便利な
BusyBoxのなかに、awkおよびsedが収録されている…というのを最近知りました。

個人的に普段はwindowsをほとんど仕事で使わない派だったのです。

数年前にエンジニアから公務員に華々しく転職した元同僚からの相談が、「お役所の仕事でエクセルファイルと何時間もにらめっこするの苦痛しかたない…庁舎のwindowsパソコンでも、csvファイルのようなテキストデータの処理を自動化する方法はないのか」という内容でした。

そのときBusyBoxを簡単にwindows上で動かせることを知りませんでしたので、
windowsでもawkが使えればなぁ...とは思ったんですが、結局さしていいアイデアを提供できず、エクセルのマクロとかでお茶を濁したことがありました。

今回の内容は、ぜひ、エクセルの煩わしい手作業の業務を、お手軽に自動化させたい役場の中の方々に利用をオススメしたいテクニックをコツコツと紹介していくコーナーです。

最初の一回目なので、windows10への導入に関して、解説しましょう。


BusyBoxをダウンロード

まずはココのサイトにアクセスして、置かれているBusyBoxのwindows用の実行ファイルをダウンロードしましょう。

ちなみに、32bit用と64bit用の2つが用意されているようです。

            
            busybox.exe:
    32bit用windows向け
busybox64.exe:
    64bit用windows向け
        
最近は、Windowsも64bitが多い気がしますが、お手元のパソコン環境に応じてダウンロードしましょう。


対応しているコマンド

ざっとbusyboxで利用できるコマンドを挙げてみます。

            
            acpid, addgroup, adduser, adjtimex, ar, arp, arping, ash,
awk, basename, beep, blkid, brctl, bunzip2, bzcat, bzip2, cal, cat,
catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot,
chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab,
cryptpw, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod,
devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname,
dos2unix, dpkg, du, dumpkmap, dumpleases, echo, ed, egrep, eject,
env, envdir, envuidgid, expand, expr, fakeidentd, false, fbset,
fbsplash, fdflush, fdformat, fdisk, fgrep, find, findfs, flash_lock,
flash_unlock, fold, free, freeramdisk, fsck, fsck.minix, fsync,
ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, hd,
hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id,
ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, inotifyd,
insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink,
iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd,
last, length, less, linux32, linux64, linuxrc, ln, loadfont,
loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr,
ls, lsattr, lsmod, lzmacat, lzop, lzopcat, makemime, man, md5sum,
mdev, mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.vfat,
mknod, mkpasswd, mkswap, mktemp, modprobe, more, mount, mountpoint,
mt, mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od,
openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress,
pivot_root, pkill, popmaildir, printenv, printf, ps, pscan, pwd,
raidautorun, rdate, rdev, readlink, readprofile, realpath,
reformime, renice, reset, resize, rm, rmdir, rmmod, route, rpm,
rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script,
scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont,
setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum,
sha512sum, showkey, slattach, sleep, softlimit, sort, split,
start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv,
svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac,
tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd,
time, timeout, top, touch, tr, traceroute, true, tty, ttysize,
udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand, uniq,
unix2dos, unlzma, unlzop, unzip, uptime, usleep, uudecode, uuencode,
vconfig, vi, vlock, volname, watch, watchdog, wc, wget, which, who,
whoami, xargs, yes, zcat, zcip
        

参考:
BusyBox - The Swiss Army Knife of Embedded Linux

本当にいたれりつくせりのツールで、これだけで
最小のLinuxといっても過言ではありません。


基本的な使い方

まずは、適当な空フォルダ(下の例ではbusybox)を作り、先ほどダウンロードしたbusybox.exe(今回はbusybox64.exe)を中に入れましょう。

ついでに、簡単なcsvファイルも
test.csvという名前で空ファイルを作成し、以下の内容で編集します。

            
            1,2,3
4,5,6
7,8,9
        
すると、以下のようにしておきます。

合同会社タコスキングダム|蛸壺の技術ブログ

おめでとうございます。

たったこれだけで、windowsでawkが利用できるようになりました。

あとは
PowerShellコマンドプロンプトで、このフォルダに入り、busybox.exeからbashを呼び出しましょう。

            
            PS C:\Users\USER\Desktop\busybox> .\busybox64.exe bash
~/Desktop/busybox $ ls
busybox64.exe test.csv
        
ちゃんと、シェルがインタラクティブモードで起動しているようです。

それでは肝心のawkの動作確認をやってみます。

            
            PS C:*****\busybox> .\busybox64.exe bash
~/busybox $ cat test.csv
1,2,3
4,5,6
7,8,9
~/busybox $ cat test.csv | awk -F "," '{print $1}'
1
4
7
        
...バッチリ動作しております。


まとめ

windowsでも、簡単にawkできることが分かりました。

これで個人的にはもうエクセルVBAで作ったデータ成形マクロとはおさらばだぜ、といきたいところです。

もちろん相変わらずエクセルは万人受けする状況で、全ての人がbusyboxを使えるわけではないのですが、windows環境でも究極の業務効率化を目指すならbusyboxはもう手放せないと感じます。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。