access.log
サーバー上のファイルをダイジェストする 3 つの関数があります。
hitsbyip() {
cat $ACCESSLOG | awk '{ print $1 }' | uniq -c | sort -nk1 | uniq
}
hitsbyhour() {
cat $ACCESSLOG | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":00"}' | sort -n | uniq -c
}
hitsbymin() {
hr=$1
grep "2015:${hr}" $ACCESSLOG | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c
}
それらはすべて、単独で使用すると正常に機能します。3 つすべてが 2 つの小さな列のデータを出力します。
今、私は別の関数を作成しようとしています。この関数は、最初の 3 つの関数の結果であるヘッダー付きの 3 列のデータを出力するための書式設定機能report
を単純に使用します。printf
そんな感じ:
report() {
printf "%-30b %-30b %-30b\n" `hitsbyip` `hitsbyhour` `hitsbymin 10`
}
問題は、フォーマットが私が望むものではないということです。列を並べてではなく、水平に印刷します。
どんな助けでも大歓迎です。