Posted at

ワンライナー使いだしたら、作業が簡単になった話

More than 1 year has passed since last update.


はじめに

新人AdventCalendar2016」10日目の記事です。

過去の学生時代の苦労が、上司のアドバイスによって、あっという間に解決された話です。


これまで

昨年度まで大学生やっていた私。自然言語処理を主にしていたので、とりあえずperlを使っていました。

perlでプログラミングして、TwitterAPI叩いてデータ集めて、データ眺めて分析といった作業。そのときの自分に教えたいテクニック。

そう、ワンライナーで書くこと。

ここから紹介することは、「おいおい、それくらい当たり前だろ」と言われることばかりを列挙しています。新人というPowerWordで流してください。


環境


劇的ビフォー・アフター


  • 文字列置換


pikotaro.txt

Pen

Pineapple
Apple
Pen

いちいちファイルを開いて、ループさせていた処理がこちら。


sample.pl

use strict;

use warnings;

$filename = $ARGV[0];
open(IN,$filename);

while(<IN>){
$word =~ s/Pen/book/;
print "$word\n";
}

close IN;


と書いていたのが、こう

cat pikotaro.txt | perl -pe 's/Pen/book/g'

み、みじかい…


  • エンコード

URL叩くために、URLエンコードの処理をしていたのがこちら


drama.txt

逃げ恥

レンタル救世主
校閲ガール
ドクターX
相棒


encode.pl

use strict;

use warnings;
use Encode;

$filename = $ARGV[0];
open(IN,$filename);

while(<IN>){
$url = ;
print "https://example.com/tv?"."drama=".$url."&conut=10"."\n";
}

close IN;


と、書いていたのが

``←明後日追記予定

とか

echo '逃げ恥' | nkf -WwMQ | tr = %

デコードは確認程度で端折ります。


  • デコード

echo '%E9%80%83%E3%81%92%E6%81%A5' | nkf -w --url-input


  • 単語数の集計

cat pikotaro.txt | grep Pen | wc


環境周りを確認するワンライナー


  • ファイルディスクリプタの確認

while true;do lsof -p pgrep -l java |cut -d " " -f1 |wc -l|awk '{print strftime("%y/%m/%d %H:%M:%S"), $0} {fflush() }';sleep 1;done;


  • ログをリアルタイムで確認

tail -f sample.log

コマンドラインが流れていくので、注意

Ctrl + cで終了


おわりに

ファイルいちいち開いて、集計なり整形していたのが嘘のようにすぐ終わるようになりました。

ワンライナーで書けるようになると、業務の効率化につながることでしょう。

紹介したいものは他にもありますが、私事につき

新人AdventCalendar2016」10日目の記事としてはここで〆ます。

来週の平日でまた増やすのと整理しますので。