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 把相鄰的相同行合併成一行並加上次數,得到 3 10.0.0.5、2 10.0.0.9、1 10.0.0.2 三行。sort -nr 依開頭的數字由大到小排序,head -n 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。
- C. 正確。10.0.0.5 出現3次,最多。