背景
フィールド処理の定番って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
めでたしめでたし