1
0

More than 3 years have passed since last update.

Goでフィールド処理するコマンドラインツールを作ってみた

Posted at

背景

フィールド処理の定番ってawkだと思うんですが、コマンドラインからawkうつのってめんどくさくないですか?
cat test.txt | awk '{print $1}'みたいな感じですが、'とか{とか$とか打ちづらい...
ワタシ指短いんで...

探してみた

やっぱ探したらあるもんですね、USP研究所様
https://uec.usp-lab.com/TUKUBAI_MAN/CGI/TUKUBAI_MAN.CGI?POMPA=MAN1_self

が、pythonか....pythonは好きなんですよ、好きなんですけどね
RHEL7とかCentOS7のデフォルトpythonってpython2なんだよおおおおお
python3のインストールとかダメっていわれるんだよおおおお
Goないのかよおおおおおおバイナリでもっていきたいよおおおお

車輪の再発明するか!wという決意が湧きました

作ってみた

https://github.com/kuritayu/infra-tools/blob/master/cmd/gosf/main.go
(go select fieldの略でgosfにしてみた)

gosf [-f separator] f1 f2 ...
cat aaa.txt | gosf 1 2みたいにパイプで渡すこともできるし、gosf 1 2 aaa.txtみたいにファイル指定することもできます
cat aaa.txt | awk '{print $1,$2}'と同じ動きですね
※NFも指定できます

測ってみた

100万行、"A B C"と書かれたファイルで、awk vs gosfで対決!

23:33:35 kuritayu@kuritayunoiMac.local gosf master ? wc -l test.txt                                                                                                                                                                                                                   130 ↵
 1000000 test.txt
23:33:38 kuritayu@kuritayunoiMac.local gosf master ? time awk '{print $1,$2}' test.txt > /dev/null
awk '{print $1,$2}' test.txt > /dev/null  0.66s user 0.01s system 98% cpu 0.676 total
23:33:49 kuritayu@kuritayunoiMac.local gosf master ? time gosf 1 2 test.txt > /dev/null
gosf 1 2 test.txt > /dev/null  1.00s user 0.26s system 100% cpu 1.261 total

処理自体はawkのほうが早いですが、'とか{のキーストロークで0.6秒以上かかってる気がするから、結果的には早いだろう!w

めでたしめでたし

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0