Section Next | Prev


011 txtana - テキストファイルの分析

概要
wc だけでなく、行あたりの文字数について最大、最小、平均を計算。 awk(1)の文字列関数の習作として。

スクリプトと解説 - [text]
#スクリプト解説
1#! /bin/bash #
2# Text analisys #
3 #
4for n in $* # 引数を順に処理
5do #
6        echo Analisis $n : # ファイル名を表示
7        wc $n | # wc を実行し、awk で表示形式を変更
8        awk '{printf "\t%5d line %10d word %10d char\n",$1,$2,$3}' #
9        pr -e8 -t $n | # pr を用いてタブを複数の空白に変換
10        awk 'BEGIN{ #
11                nulline=0; maxline=0; minline=1000; total=0; line=0} # 統計用変数の初期化
12        { #
13                strlen=length($0) ; line=line+1 # 文字数を strlen, 行数を line とする
14                total=total+strlen # ファイル全体の総文字数を total とする
15                if (strlen==0) nulline = nulline +1 # 空行の数を数える
16                if (strlen>maxline) maxline=length($0) # 1行あたりの最大文字数 maxline とする
17                if (strlen<maxline) minline=length($0) } # 1行あたりの最小文字数 minline とする
18        END{ # ファイルを読み終わった時点
19                printf "\tchar/line 0 (max)\t", maxline #
20                printf "0 (min)\t", minline #
21                printf "0 (ave)\t", total/line # 総文字数 / 行数 をもとめる
22                printf "0 (null)\n", nulline #
23        }' #
24done #

実行例
$ txtana /etc/httpd/conf/httpd.conf /etc/passwd
Analisis /etc/httpd/conf/httpd.conf :
         1097 line       5177 word      37427 char
        char/line   104 (max)   38 (min)        33 (ave)        96 (null)
Analisis /etc/passwd :
          224 line        339 word      13791 char
        char/line   107 (max)   95 (min)        60 (ave)        0 (null)

Section Next | Prev