awk查詢access.log問題 - Linux

Quintina avatar
By Quintina
at 2019-09-20T17:33

Table of Contents

※ 引述《angle065 (Fu)》之銘言:
: 大家好,小弟有個問題想請教,因為想直接查詢出access.log不重複的ip
: 查到可以利用這個指令去查
: awk '{tmp[$1]} END {for (i in tmp) print i}' access.log
: 這邊有個比較不理解的地方想請教各位大大

這邊有點取捷徑,如果你看不懂的話可以用:

awk '{tmp[$1] = 1} END {for (i in tmp) print i}' access.log

這樣就會好懂一些。你可以交叉比較:

awk '{tmp[$1]} END {for (i in tmp) print tmp[i]}' access.log

你會發現裡面全部都是 1。

: 其中的 {tmp[$1]} 這個部分,我理解是把每一行的 第一組文字
: 寫入到tmp這個陣列變數中,接著再利用for迴圈去呈現重複的文字
: 也確實是讓我取得所有不重複的IP
: 想請教這個觀念是對的嗎?
: 那想請問tmp[$1],這個是哪一種語言寫入陣列的方式呢?
: 因為我稍微略懂一點PHP、JS,這樣的做法通常是塞給陣列/物件,索引值再用的
: 應該不是寫入陣列

不同家的實做不太一樣,但因為 POSIX 標準的關係,標準內定義的功能必須實做:

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html

在 GNU awk 的 manual 裡面是這樣寫:

All arrays in AWK are associative, i.e., indexed by string values.

而在 FreeBSD 上的 awk manual 則是這樣說:

Array subscripts may be any string, not necessarily numeric; this allows
for a form of associative memory. Multiple subscripts such as [i,j,k]
are permitted; the constituents are concatenated, separated by the value
of SUBSEP (see the section on variables below).

其他家又會有其他的方式,翻 manpage 或是 google 一下通常都會有。

然後補充一下,你的問題我的習慣是:

cut -d ' ' -f 1 access.log | sort -u
awk '{print $1}' access.log | sort -u

如果只是要看大宗的數量:

awk '{print $1}' access.log | sort | uniq -c | sort -n | tail

然後要看現在是哪個王八蛋在打:

while true; do clear; date; tail -n 10000 access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail; sleep 1; done

指令用的習慣就好,方法還蠻多的...

--
Resistance is futile.
https://blog.gslin.org/ & <[email protected]>

--
Tags: Linux

All Comments

Odelette avatar
By Odelette
at 2019-09-21T05:12
本來想推用 watch ,但後面那串太長了,又有引號。

Failed to load session "ubuntu"

Megan avatar
By Megan
at 2019-09-18T00:02
※ 引述《anoymouse (沒有暱稱)》之銘言: : 本來版本ubuntu 12.04 LTS : 更新成14.04.6,結果跳出訊息告知安裝無法完全,可能之前安裝的有缺漏, : 然後還是允許繼續安裝,裝完後重開機就一直跳出這個錯誤訊息。 : 後來上網找方法透過ctrl+alt+F1 進到 tty1 終端 ...

Failed to load session "ubuntu"

Carol avatar
By Carol
at 2019-09-17T20:02
本來版本ubuntu 12.04 LTS 更新成14.04.6,結果跳出訊息告知安裝無法完全,可能之前安裝的有缺漏, 然後還是允許繼續安裝,裝完後重開機就一直跳出這個錯誤訊息。 後來上網找方法透過ctrl+alt+F1 進到 tty1 終端機, 進行如下安裝: sudo apt-get update ...

CentOS 8 final release 9/24

Skylar Davis avatar
By Skylar Davis
at 2019-09-17T15:46
https://wiki.centos.org/About/Building_8 Final release 2019-09-24 - ...

dosbox+wine玩老遊戲(三國志5+6)

James avatar
By James
at 2019-09-16T22:25
因為幫光碟機換了皮帶所以就有了這篇心得XD 本篇所有操作都在 Arch Linux 下進行 //cd 首先從把三國志5+6遊戲光碟弄成 cue 檔開始(為了CD音軌) # pacman -S cdrdao (有裝的可以略過) $ cdrdao read-cd --datafile SAN5.bin ...

iptables 字串封鎖功能

Yedda avatar
By Yedda
at 2019-09-16T18:48
※ 引述《fordmvp (無名氏)》之銘言: : 之前用Ubuntu 14.04桌面版安裝iptables 用string封鎖字串可以成功,後來改安裝 : centos7.6安裝iptables但同樣的指令雖然可以執行確實際沒有封鎖,請問何解? : 後來有看到網路上有webstr和weburl指令,確卻無法 ...