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

選択肢では、行の先頭の空白を除いて示す。上の操作で、最後のパイプラインが出力する行として、正しいものはどれか。

  1. A1 10.0.0.2
  2. B2 10.0.0.9
  3. 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回で最も多く出ています。
この分野を解く 分野ページへ

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

Linuxとコマンドラインの基礎のほかの問題

  1. サーバのログファイル /var/log/app.log に後から追記される行を、追記されるたびに画面に表示し続けたい。適切なコマンドはどれか。
  2. カンマ区切りの行から列を取り出す上のコマンドの出力として、正しいものはどれか。
  3. 文字を置き換える上の sed のコマンドの出力として、正しいものはどれか。
  4. 上の操作で、最後の awk が出力する内容として、正しいものはどれか。
  5. GNU の find で「find /data -name "*.log" -mtime +7 -size +100M」を実行したときに見つかるファイルの説明として、正しいものはどれか。