awk 演習: ASCII 文字かの判定 ― 2009年03月31日 00時18分10秒
od を用いて、八進数で表示されている文字が無かったら、ファイル名を表示する。入力から入ってきたデータを基に、更にプロセスを生成して、処理する例だ。
{ bin = 0;
filename = $0
cmd = "od -c " filename
count=0
while(cmd | getline line)
{
n = split(line, token)
if(count++ == 0 && n == 1){ bin = 1; break }
for(i = 2; i <= n; i++)
if(length(token[i]) >= 3) { bin = 1; break }
}
close(cmd)
if(!bin) print filename
}
ファイル名を入力として受け取り、ASCII 文字のみのファイル名を出力に出す。この様に、大量のファイルを開いたりプロセスを生成する場合は、しっかり close() を呼ばないとエラーを起こす。
このプログラム自体は実行速度も遅いし、空のファイルの扱いも出来ておらず、あまり良くできていない。awk で使い捨ての時は、正確性として多少問題はあっても数回動かすデータの範囲内なら問題は無い。ただ、後で引用する時には、そこらへんの注意も必要になる。
最近のコメント