亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3264 | 回復: 4
打印 上一主題 下一主題

關(guān)于apache 的access_log 中url 參數(shù)的提取問題 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-03-25 09:42 |只看該作者 |倒序瀏覽
需求: 從apache的 access_log中提取日志記錄,插入到數(shù)據(jù)庫中,基本信息都已經(jīng)提取出來了。
       現(xiàn)在遇到一個難題,就是需要把url中的參數(shù)分析出來。

經(jīng)過處理后的數(shù)據(jù)文件格式如下:
cat data.txt     一共有7行
----------------------------------
pid=100&type=1
pid=105&type=2&Sortid=1
Themeid=1002&Sortid=3&offid=102
Themeid=1002&Sortid=4&offid=102&page=1
pid=101

Themeid=1002&Sortid=3&offid=102&&page=2&from=jdk
----------------------------------

期望輸出的結(jié)果為:
格式:   參數(shù)1 參數(shù)1值 參數(shù)2 參數(shù)2值 ...   ( 參數(shù)1 參數(shù)1值  對應(yīng)數(shù)據(jù)庫中的字段)
pid  piddata tpye  tpyedata  Sortid Sortiddata  Themeid Themeiddata offid offiddata page pagedata from fromdata

要求沒有符合條件的記錄空出位置,填充“-”,空行也要保留,這樣是為了跟其他已經(jīng)提取出來的行數(shù)據(jù)保持一致。

即:   輸出結(jié)果也為7行。
pid  100  type 1     -      -       -        -          -     -        -    -     -      -
pid  105  type 2     -      -       -        -          -     -        -    -     -      -
-      -      -       -  Sortid 3 Themeid 1002 offid 102     -    -     -      -
-      -      -       -  Sortid 4 THemeid 1002 offid 102 page 1    -      -
pid  101  -       -     -      -       -        -          -     -        -    -     -      -
-      -      -       -     -      -       -        -          -     -        -    -     -      -
-      -      -       -  Sortid 3 Themeid 1002 offid 102 page 1 from jdk


下面是我處理的腳本:
因為參數(shù)并不是很多,我想針對每一個參數(shù)如:pid進行分析, 然后再通過paste進行合并。
#!/bin/awk -f
#my.awk

BEGIN {FS="[&=]"; OFS="[|]"}
{
    for(i=1;i<=NF;i++)
   {
       if( $i ~/pid/ )
       printf NR"\t"$i"\n"
   }
}

輸出結(jié)果:
awk -f my.sh data.txt

行號  pid   值
1       pid=100
2       pid=105
5       pid=101

但是空行無法打印出來,只是記錄了行號,如果按照 NR 循環(huán)進行排序,會有N多重復數(shù)據(jù)。

或者可以通過一個數(shù)組把所有參數(shù)列進去,進行比較,把符合條件的參數(shù)和對應(yīng)的值按照格式打印出來。

不知道我描述的明白與否,還請高手指點。

論壇徽章:
0
2 [報告]
發(fā)表于 2008-03-25 14:02 |只看該作者
  1. [root@myhost test]# cat c.awk
  2. BEGIN{
  3. FS="&"
  4. }
  5. function anlzz(x)
  6. {
  7.         a=""
  8.         if (x~/pid=/){a=a"pid "gensub(/.*pid=([^&]+).*/,"\\1",1,x)}else{a=a"- -"}
  9.         if (x~/type=/){a=a" type "gensub(/.*type=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
  10.         if (x~/Sortid=/){a=a" srotid "gensub(/.*Sortid=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
  11.         if (x~/Themeid=/){a=a" Themeid "gensub(/.*Themeid=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
  12.         if (x~/offid=/){a=a" offid "gensub(/.*offid=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
  13.         if (x~/page=/){a=a" page "gensub(/.*page=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
  14.         if (x~/from=/){a=a" from "gensub(/.*from=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
  15.         return a
  16. }

  17. {print anlzz($0)}
復制代碼
awk -f c.awk filename

[ 本帖最后由 nuclearxin 于 2008-3-25 14:29 編輯 ]

論壇徽章:
0
3 [報告]
發(fā)表于 2008-03-25 18:01 |只看該作者
多謝!

試了一下,對于規(guī)則數(shù)據(jù)可行。

如果 當某個參數(shù)后面的值為空時 (第二行 Sortid=)
如: pid=105&type=2&Sortid=

輸出結(jié)果為:
pid 100 type 1 - - - - - - - - - -
pid 105 type 2 srotid pid=105&type=2&Sortid= - - - - - - - -
- - - - srotid 3 Themeid 1002 offid 102 - - - -
- - - - srotid 4 Themeid 1002 offid 102 page 1 - -
pid 101 - - - - - - - - - - - -
- - - - - - - - - - - - - -
- - - - srotid 3 Themeid 1002 offid 102 page 2 from jdk
- - - - - - - - - - - - - -

會有點問題。

呵呵, 我試試修改一下你的腳本。

論壇徽章:
0
4 [報告]
發(fā)表于 2008-03-26 10:06 |只看該作者
原帖由 cbs20 于 2008-3-25 18:01 發(fā)表
多謝!

試了一下,對于規(guī)則數(shù)據(jù)可行。

如果 當某個參數(shù)后面的值為空時 (第二行 Sortid=)
如: pid=105&type=2&Sortid=

輸出結(jié)果為:
pid 100 type 1 - - - - - - - - - -
pid 105 type 2 srotid  ...


用"="后面的 大寫字母  做判斷應(yīng)該沒有問題吧
具體取決于你的 文件內(nèi)容

論壇徽章:
0
5 [報告]
發(fā)表于 2008-03-26 10:55 |只看該作者
BEGIN{
FS="&"
}
if(NF>0)
{
        a=""
        if ($1~/pid=/){a=a"pid "gensub(/.*pid=([^&]+).*/,"\\1",1,x)}else{a=a"- -"}
        if ($2~/type=/){a=a" type "gensub(/.*type=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
        if ($3~/Sortid=/){a=a" srotid "gensub(/.*Sortid=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
        if ($4~/Themeid=/){a=a" Themeid "gensub(/.*Themeid=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
        if ($5~/offid=/){a=a" offid "gensub(/.*offid=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
        if ($6~/page=/){a=a" page "gensub(/.*page=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
        if ($7~/from=/){a=a" from "gensub(/.*from=([^&]+).*/,"\\1",1,x)}else{a=a" - -"}
        print a
} else
{print $0}
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP