アプリ版:「スタンプのみでお礼する」機能のリリースについて

Linuxについて質問です。

引数に指定されたアクセスログのファイルからアクセス数が多い順に上位3つだけ表示するシェルスクリプトを作成したいです。
指定するアクセスログのファイルはいくつ指定してもよいことにします。
シェルスクリプト名をaccess2.shとして、2つのアクセスログファイルを指定してシェルスクリプトを実行したとき以下のように表示したいです。
(for文を使って)
どのように記述すればいいですか?

% bash access2.sh access_log access_log2
access_log
440 10.32.224.5
3 10.32.224.68
access_log2
801 10.32.97.63
581 10.32.224.52
341 10.32.224.5





また、access2.shを書き換えて以下のように出力できるようにもしたいです。
シェルスクリプト名をaccess3.shとして、2つのアクセスログファイルを指定してシェルスクリプトを実行したとき以下のように前回と同じで表示される。

% bash access3.sh access_log access_log2
access_log
440 10.32.224.5
3 10.32.224.68
access_log2
801 10.32.97.63
581 10.32.224.52
341 10.32.224.5
オプション -h の右に各ファイルで出力する行数を指定できるようにする。(Shiftコマンドを使用)

A 回答 (1件)

ログファイルから、行ごとに必要箇所のみ抽出して、重複を勘定して、件数で並び替えて、上位数件を切りとりましょう。



cat $ログファイル | awk '{print $必要箇所}' | sort | uniq -c | sort -nr | head -n $件数

複数対象なら for で囲み繰り返し
オプション指定するなら事前に getopt で変数設定

参考)
https://search.goo.ne.jp/web.jsp?MT=bash%20scrip …
https://linuxjm.osdn.jp/html/GNU_gawk/man1/gawk. …
https://linuxjm.osdn.jp/html/GNU_textutils/man1/ …
https://linuxjm.osdn.jp/html/GNU_textutils/man1/ …
https://linuxjm.osdn.jp/html/GNU_textutils/man1/ …
https://linuxjm.osdn.jp/html/util-linux/man1/get …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!