2013-04-01 80 views

回答

4

這裏有一個方法:

BEGIN{ 
    FS="?" 
} 
{ 
    url=$1 
    sub(/[^/]*$/,"",url) 
    print "URL:",url 

    sub(/.*[/]/,"",$1) 
    print "Service:",$1 

    n=split($2,b,/&/) 
    for (i=1;i<=n;i++) 
     print b[i] 
} 

保存爲script.awk和運行像awk -f script.awk file

URL: http://www.abcdsample.com/ 
Service: listservices 
a=1 
b=10 
c=abcdeeff 
d=1663889 
listservices=a|b 

注:這會爲URL工作像:

+0

謝謝。這適用於特定要求。我想知道是否有辦法將URL作爲參數發送到腳本 – user1652054

+1

@ user1652054有多種方式?你想怎麼做?你可以'echo「$ url」| awk -f script.awk或awk -f script.awk <<<「$ url」'其中'$ url'可以是一個shell變量或文字URL。 –

+0

謝謝。它有助於。 – user1652054

2

一種方式:

$ gawk -F'&' '{ 
    $0 = gensub(/(^[^/]+[/][/][^/]+[/])([^?]+)[?]/,"\\1\\&\\2\\&","") 
    print "URL:",$1 
    print "Service:",$2 
    for (i=3;i<=NF;i++) 
     print $i 
}' file 
URL: http://www.abcdsample.com/ 
Service: listservices 
a=1 
b=10 
c=abcdeeff 
d=1663889 
listservices=a|b 
+0

+1 awk guru ... – Kent

+0

感謝您的建議。 awk/regex中我不太好。如果你能解釋如何調整相同的URLS,那麼這將對你有幫助 - listservices?a = 1&b = 10&c = abcdeeff&d = 1663889&listservices = a | b或/ listservices?a = 1&b = 10&c = abcdeeff&d = 1663889&listservices = a | b基本上沒有域名信息 – user1652054

+1

對不起,如果你有興趣,你必須弄清楚你的自我(這是一個非常簡單的調整)。當您發佈問題以包含一些代表性投入和預期產出時,這很重要。如果您忽略了輸入的重要變化,然後發現您的輸入與您發佈的內容不匹配後,我們發佈了適用於該輸入的答案,這實在是不真實和刺激,所以我們中的一些人會失去對嘗試幫助的興趣您。在這種情況下,您要求幫助解析URL,發佈了一個示例URL,現在要求對其進行「調整」以獲得不是URL的輸入。來吧。 –