行数に応じて less と cat を切替えてくれるスクリプト
行数に応じてlessとcatを切替えてくれるスクリプト - みずぴー日記にインスパイヤされて awk でも同様のスクリプトを書いてみます。
要するに端末画面の大きさを拾い、その行数よりもファイルの行数が少ない場合には cat (ここでは nkf) を用い、大きい場合には less (ここでは lv) を用いるというものです。 古くから Unix 系 OS を使っているとファイルの文字コードは様々なものが存在するため、nkf や lv といった自動で文字コードを変換してくれるものを用いると便利です。
コードはもう少し面白いコードにしようと思ったのですが、行数に応じてlessとcatを切替えてくれるスクリプト - みずぴー日記の Perl のコードとほぼ同じ内容になっています。
#! /usr/local/bin/nawk -f
# scat.awk
# 行数に応じて cat と less を切り替えてくれるプログラム
# usage: nawk -f scat.awk file
BEGIN {
# 端末の高さを取得する
stty_cmd = "/bin/stty";
stty_opt = "-a";
stty_exec = stty_cmd " " stty_opt;
while (stty_exec | getline > 0) {
if ($4 == "rows") {
rows = $5;
sub(/;/, "", rows);
}
}
close(stty_exec);
# 表示行数よりもファイル行数が多いかどうかの判定
file = ARGV[1];
while (getline < file > 0) {
nr++;
if (nr > rows) {
use_less = 1;
break;
}
}
close(file);
cat_exec = "/usr/bin/nkf -w";
less_exec = "/usr/bin/lv -Ou8 -c";
if (use_less) {
system(less_exec " " file);
} else {
system(cat_exec " " file);
}
}
実際に実行したところを Web で表示しても違いが分かりにくいので、コードだけにしておきます。




