[問題] awk要擷取資訊會亂掉

看板Linux作者 (NEET)時間7年前 (2016/08/23 20:50), 編輯推噓3(3013)
留言16則, 4人參與, 最新討論串1/1
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

08/23 21:11, , 1F
我認真建議這種稍稍複雜的parsing 不要用 shell
08/23 21:11, 1F

08/23 21:11, , 2F
用個 python 或 perl 都簡單數倍
08/23 21:11, 2F

08/23 21:14, , 3F
awk 'BEGIN{FS="."} {print $1"."$2}'
08/23 21:14, 3F

08/23 21:17, , 4F
請問這樣會複雜嗎?我目前只有學vbird教的手法而已
08/23 21:17, 4F

08/23 21:18, , 5F
@yvb:謝謝成功了,請問問題是出在哪裡?
08/23 21:18, 5F

08/23 21:24, , 6F
或者 awk -F "." '{print $1"."$2}' 也可以.
08/23 21:24, 6F

08/23 21:25, , 7F
問題在於預設先用空白斷完句了,你才設定FS,所以第二列才生效.
08/23 21:25, 7F

08/23 21:28, , 8F
而用BEGIN{}就是未讀入資料時就先執行了,或直接指定-F即生效.
08/23 21:28, 8F

08/23 21:55, , 9F
感謝指點
08/23 21:55, 9F

08/23 22:01, , 10F
如果只要類似的效果是不是可以寫短一點?
08/23 22:01, 10F

08/23 22:01, , 11F
grep -Eo 'SRC=([0-9]+\.){2}' test.txt|sort|uniq -c
08/23 22:01, 11F

08/23 22:07, , 12F
或中間再多一個| grep -Eo '[0-9]+\.[0-9]+' |
08/23 22:07, 12F

08/24 20:14, , 13F
我還沒測試,不過我想soem說的是正確的。其實我是把過去
08/24 20:14, 13F

08/24 20:14, , 14F
運作正常的指令不斷擴增才變這樣的。
08/24 20:14, 14F

08/24 20:15, , 15F
最初始只有把LOG中的IP抓出來這樣XD
08/24 20:15, 15F

08/24 20:15, , 16F
好像演化論的痕跡器官XD
08/24 20:15, 16F
文章代碼(AID): #1Nl4QPs2 (Linux)