2017-06-07 29 views
-2

我有一個包含數百萬行這樣的日誌文件:如何使用AWK正則表達式打印多個子模式的Excel格式在不同的列

$ cat file.log 
10.0.7.92 - - [05/Jun/2017:03:50:06 +0000] "GET /adserver/html5/inwapads/?category=[IAB]&size=320x280&ak=AY1234&output=vast&version=1.1&sleepAfter=&requester=John&adFormat=preappvideo HTTP/1.1" 200 131 "-" "Mozilla/5.0 (Linux; Android 6.0.1; SM-S120VL Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36" 0.000 1029 520 127.0.0.1 
10.0.6.91 - - [05/Jun/2017:03:50:06 +0000] "GET /adserver/html5/inwapads/?category=[IAB]&output=vast&version=1.1&sleepAfter=&requester=John&size=320x280&ak=AY1234&adFormat=preappvideo HTTP/1.1" 200 131 "-" "Mozilla/5.0 (Linux; Android 6.0.1; SM-S120VL Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36" 0.000 1029 520 127.0.0.1 

我要像在Excel每行的打印輸出不同的列:

inwapads AY1234 john 320x280 

如何做到這一點使用awk還是需要使用其他方法。

+3

你將不得不顯示你自己的努力來解決這個問題..並且看到https://stackoverflow.com/editing-help – Sundeep

+0

給出的輸出結果是否真的有很多'*',或者這只是你的一個暗示? –

+0

***只是提示我需要輸出哪個參數和值。 ***不存在真實案例 – sourav

回答

0

如果您想要輸入看起來像文件中的數據:

$ cat file.log 
10.0.7.92 - - [05/Jun/2017:03:50:06 +0000] "GET /adserver/html5/inwapads/?category=[IAB]&size=320x280&ak=AY1234&output=vast&version=1.1&sleepAfter=&requester=John&adFormat=preappvideo HTTP/1.1" 200 131 "-" "Mozilla/5.0 (Linux; Android 6.0.1; SM-S120VL Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36" 0.000 1029 520 127.0.0.1 
10.0.6.91 - - [05/Jun/2017:03:50:06 +0000] "GET /adserver/html5/inwapads/?category=[IAB]&output=vast&version=1.1&sleepAfter=&requester=John&size=320x280&ak=AY1234&adFormat=preappvideo HTTP/1.1" 200 131 "-" "Mozilla/5.0 (Linux; Android 6.0.1; SM-S120VL Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36" 0.000 1029 520 127.0.0.1 

然後,你可以簡單地使用awk$7柱正與一些gensub(/regex/, substitution, n, column)awk的一般替換工具

$ awk '{ 
    item=gensub(/(^.*\/)(.*\/)(.*)(\/)(\?.*$)/ , "\\3" , 1, $7) 
    ak=gensub(/(^.*ak\=)([A-Z]*[0-9]*)(\&)(.*$)/ , "\\2" , 1, $7) 
    req=gensub(/(^.*requester\=)([A-Za-z]*)(\&)(.*$)/ , "\\2", 1, $7) 
    s=gensub(/(^.*size\=)([0-9]*x[0-9]*)(\&.*$)/, "\\2", 1, $7) 
    print item, ak, req, s 
}' file.log 

輸出:

inwapads AY1234 John 320x280 
inwapads AY1234 John 320x280 
+0

謝謝。但***只是爲了突出顯示。這***不是真實的情況。這些參數的索引值也不一致。需要使用正則表達式模式匹配。 – sourav

+0

然後,如果您沒有編碼工作,請編輯您想要的輸入和輸出的文章。 –

+0

更改完成。如果可以,請在這裏幫忙。 – sourav

相關問題