はじめに

この資料は Rust 製のコマンドラインツール top_n_tail について紹介するものです。

Rustの環境構築やツールのインストール方法については以下を参照してください

Rust開発環境を整える

top_n_tail

ファイルや標準入力からテキストを抽出するCLIユーティリティです。コマンド名は tnt です。

GitHub - jayman888/top_n_tail: Extract lines from files CLI tool

入力データで先頭と末尾が不要な場合に重宝します。

使用方法

標準入力から読み取る場合

$ tnt 5 15 < seq 1 20
$ seq 1 20 | tnt 5 15

ファイルがから読み取る場合

$ seq 1 20 > my_seq.txt && tnt 5 15 -f my_seq.txt

パフォーマンス

seqを使ったテストデータの生成 9,999,999行を作成してテストしてみました。

はじめに、tailとheadを使って挙動をエミュレートし、tntで実行してみました。

tnt で同様の処理を実行してみます。

$ seq 9999999 | time tail -9999998 | head -9999997 > /dev/null
tail -9999998  9.62s user 8.38s system 93% cpu 19.188 total
head -9999997 > /dev/null  3.12s user 5.18s system 48% cpu 17.220 total

$ seq 9999999 | time tnt 1 9999997 > /dev/null
tnt 1 9999997 > /dev/null  0.36s user 0.21s system 17% cpu 3.286 total

従来の方法では抽出に要した時間は合計で約19秒でしたが、 tnt では約3秒で処理できました。