Awkward - 行指向は古すぎる!全てがオブジェクトで表現されたNodeJS製のシェル

シェアする

S 2016 07 21 23 48 32

小さなツールをパイプを駆使して組み合わせるUNIX哲学。行指向のデータを効率良く処理する方法を知る物が勝者となる環境です。

対して本日紹介する「Awkward」は、行指向ではなくJavaScriptの配列を使ってデータを処理することができるユニークなシェルプログラムです。NodeJS製のツールで、npmを使用してインストールすることができます。

npm install -g awkward

Awkwardではシェルコマンドやその他実行ファイルの出力を、JavaScriptの配列として取り扱い、Arrayのmap、forEach、filterといったメソッドを適用することができます。

例えばpsを実行する場合、シェルの標準出力が、以下のような配列に変換されるのです。

シェル出力:

PID TTY          TIME CMD
13750 pts/14   00:00:00 bash
25193 pts/14   00:00:03 node
25271 pts/14   00:00:00 sh
25272 pts/14   00:00:00 ps

配列:

[ [ 'PID', 'TTY', 'TIME', 'CMD' ],
[ '13750', 'pts/14', '00:00:00', 'bash' ],
[ '25193', 'pts/14', '00:00:03', 'node' ],
[ '25283', 'pts/14', '00:00:00', 'sh' ],
[ '25284', 'pts/14', '00:00:00', 'ps' ] ]

以下のように評価することで結果を自由に加工することができます。

(command).function((elem)=>{})

例えばlsを実行しファイル名とその長さを表示する場合、以下のようになります。

sora@awk ward:~$ ls().forEach(a => console.log(a[0], a[0].length))
Gemfile 7
Gemfile.lock 12
README.rdoc 11
Rakefile 8
app 3
bin 3
build.sh 8
config 6
config.ru 9
db 2
hello.sh 8
hello_parameter.sh 18
lib 3
log 3
out 3
public 6
rails41-bootstrap-demo.iml 26
test 4
tmp 3
untitled 8
vendor 6

ファイルサイズとファイル名を表示するのも簡単です。

sora@awk ward:~$ (ls -l)().forEach(a => console.log(a[4], a[8]))
undefined undefined
1439 Gemfile
4045 Gemfile.lock
295 README.rdoc
249 Rakefile
306 app
170 bin
342 build.sh
374 config
154 config.ru
238 db
189 hello.sh
66 hello_parameter.sh
136 lib
204 log
102 out
238 public
38441 rails41-bootstrap-demo.iml
306 test
204 tmp
68 untitled
136 vendor

単体のシェルとしての機能自体はまだまだ不足気味ですが、新たなシェルのアイデアとして興味深いものとなっています。Hacker Newsでもアイデアの斬新さから、多くのコメントが寄せられています。awkやsedの奇妙な構文には我慢できないという方は試してみると新たな発見があるかもしれません。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

シェアする

フォローする