#はじめに
「新人AdventCalendar2016」10日目の記事です。
過去の学生時代の苦労が、上司のアドバイスによって、あっという間に解決された話です。
#これまで
昨年度まで大学生やっていた私。自然言語処理を主にしていたので、とりあえずperlを使っていました。
perlでプログラミングして、TwitterAPI叩いてデータ集めて、データ眺めて分析といった作業。そのときの自分に教えたいテクニック。
そう、ワンライナーで書くこと。
ここから紹介することは、「おいおい、それくらい当たり前だろ」と言われることばかりを列挙しています。新人というPowerWordで流してください。
#環境
- Windows7 32bit
- CentOS-7 64bit
- VirtualBoX
#劇的ビフォー・アフター
- 文字列置換
Pen
Pineapple
Apple
Pen
いちいちファイルを開いて、ループさせていた処理がこちら。
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エンコードの処理をしていたのがこちら
逃げ恥
レンタル救世主
校閲ガール
ドクターX
相棒
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日目の記事としてはここで〆ます。
来週の平日でまた増やすのと整理しますので。