看板 Linux 關於我們 聯絡資訊
https://www.space.ntu.edu.tw/navigate/s/169EE84AFE094594B31CA1F7ADDEDE1DQQY 上面是我的LOG取出有問題的部分, 我想抓出source的IP的前2碼然後sort + uniq計算次數 所以我用 grep 'SRC=[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*' \ /tmp/test.txt|sed 's/^.*SRC=//g'|awk '{FS="."} {print $1"."$2}'|sort|uniq -c 結果跑出的是 2 62.210 1 62.210.12.127.DST=10.2.7.1 後來我往前回推 grep 'SRC=[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*' \ /tmp/test.txt|sed 's/^.*SRC=//g'|awk '{FS="."} {print $1}' 62.210.12.127 62 62 grep 'SRC=[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*' /tmp/test.txt|sed 's/^.*SRC=//g' 62.210.12.127 DST=10.2.7.1 LEN=40 TOS=0x00 PREC=0x00 TTL=240 I... 62.210.12.127 DST=10.2.7.1 LEN=40 TOS=0x00 PREC=0x00 TTL=240 I... 62.210.12.127 DST=10.2.7.1 LEN=40 TOS=0x00 PREC=0x00 TTL=240 I... 看起來awk無法把其中一筆的分隔給判斷好,但是問題在於IP用"." 分隔沒錯啊!請問是哪裡有問題? -- 最近你的吸引力將大幅上漲,周遭的異性將慢慢的被你迷惑,慢慢的開始愛上你......。 唯一美中不足的是───────那群異性中有一半以上是齧齒目,其餘的則是爬蟲類。 或是你也可以換個樂觀的角度───愛上你的只有不到一半是爬蟲類,其餘都是齧齒目。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.137.70 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1471956633.A.D82.html
CaptainH: 我認真建議這種稍稍複雜的parsing 不要用 shell 08/23 21:11
CaptainH: 用個 python 或 perl 都簡單數倍 08/23 21:11
yvb: awk 'BEGIN{FS="."} {print $1"."$2}' 08/23 21:14
REIDO: 請問這樣會複雜嗎?我目前只有學vbird教的手法而已 08/23 21:17
REIDO: @yvb:謝謝成功了,請問問題是出在哪裡? 08/23 21:18
yvb: 或者 awk -F "." '{print $1"."$2}' 也可以. 08/23 21:24
yvb: 問題在於預設先用空白斷完句了,你才設定FS,所以第二列才生效. 08/23 21:25
yvb: 而用BEGIN{}就是未讀入資料時就先執行了,或直接指定-F即生效. 08/23 21:28
REIDO: 感謝指點 08/23 21:55
soem: 如果只要類似的效果是不是可以寫短一點? 08/23 22:01
soem: grep -Eo 'SRC=([0-9]+\.){2}' test.txt|sort|uniq -c 08/23 22:01
soem: 或中間再多一個| grep -Eo '[0-9]+\.[0-9]+' | 08/23 22:07
REIDO: 我還沒測試,不過我想soem說的是正確的。其實我是把過去 08/24 20:14
REIDO: 運作正常的指令不斷擴增才變這樣的。 08/24 20:14
REIDO: 最初始只有把LOG中的IP抓出來這樣XD 08/24 20:15
REIDO: 好像演化論的痕跡器官XD 08/24 20:15