Linuxとコマンドラインの基礎
$ cat ips.txt
10.0.0.5
10.0.0.9
10.0.0.9
10.0.0.5
10.0.0.2
10.0.0.5
$ sort ips.txt | uniq -c | sort -nr | head -n 1選択肢では、行の先頭の空白を除いて示す。上の操作で、最後のパイプラインが出力する行として、正しいものはどれか。
- A1 10.0.0.2
- B2 10.0.0.9
- C3 10.0.0.5
答えと解説を見る
正解:C. 3 10.0.0.5
sort で同じ行が隣り合うように並べ、uniq -c で隣り合う同じ行を1つにまとめて回数を付けると、3 10.0.0.5、2 10.0.0.9、1 10.0.0.2 の3行になります。sort -nr は先頭の数で大きい順に並べ、head -n 1 で最初の1行を取り出すので、出力は 3 10.0.0.5 です。uniq は「隣り合う」同じ行しかまとめないので、先に sort しておくことが欠かせません。このようにパイプでコマンドをつなぐ集計は、ログからアクセスの多いIPアドレスや、多く出るエラーを数えるときの定番です。
- A. 最後の sort に -r がないと少ない順に並び、先頭が 1 10.0.0.2 になります。-r は大きい順に並べるオプションです。
- B. 最初の sort を省いて、uniq -c だけで数えたときの結果です。uniq は隣り合う行しかまとめないので、10.0.0.9 の2行の連続だけが2と数えられます。
- C. 正しい。10.0.0.5 が3回で最も多く出ています。