藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教一個分析腳本

要做一個文本日至分析腳本。

有一個日至文件裡面有大量的這樣的行
/main/inde.jsp?a=21212&b=323235223&c=238580982&d=283928392&e=23928392
/main/list.jsp?a=323232&c=919210&d=949909402392&b=23231256&e=32938283

a,b,c,d,e各個可能不都出現,順序不確定。

我需要將每行都出現了a,c,e的行提取出來,並用逗號將內容分隔,順序為a,b,c。
原文件中的一行對應新的一行。

比如上面的兩行整理後就應該是
21212,238580982,23928392
323232,919210,32938283

求大家幫幫忙,寫一個正則提取腳本。
我覺得sed大概可以,怎奈功力不夠。

多謝各位了。

請教一個分析腳本

sed 's/.*a=\([0-9]*\).*c=\([0-9]*\).*e=\([0-9]*\).*/\1,\2,\3/' 7

請教一個分析腳本

sed 's/.*a=\([0-9]*\).*c=\([0-9]*\).*e=\([0-9]*\).*/\1,\2,\3/' file

請教一個分析腳本

多謝「一夢如是」

但是還有兩個問題:
1、如果a,c,e的出現順序不一樣了怎麼辦?
也就是參數出現順序比如變成了e=...,a=...,c=...

2、上面好像是做了一個替換操作,但是對於不符合替換的行是直接輸出了。能不能只輸出匹配的行?

請教一個分析腳本

頂一下

請教一個分析腳本

[code]
grep -E -o 'a=[0-9]*|c=[0-9]*|e=[0-9]*' file|xargs -n3|tr -d '[a-z=]'|tr ' ' ','
[/code]

請教一個分析腳本

sed -ne '/a=/{/b=/{/e=/s/\&/,/gp;};}' yourfile

awk '/a=/&&/b=/&&/e=/{gsub("&",",");print}' yourfile

請教一個分析腳本

我這個做法麻煩了點,不過拋磚引玉。

awk '/a=/&&/c=/&&/e=/{print $0}' bb | \
sed -e 's/\/main\/inde.jsp?//g' -e 's/=/ /g' -e 's/&/ /g' | \
awk 'BEGIN{OFS=","}
{for (i=1;i<=NF;i++)
if ( $i ~ /a/ ) aa=$(i+1)
else if ( $i ~ /c/ ) cc=$(i+1)
else if ( $i ~ /e/ ) ee=$(i+1)
print aa,cc,ee}'

請教一個分析腳本

看眼界!命令還能寫成這樣。

需要過濾的源文件,內容如下:
/main/inde.jsp?a=21212&b=323235223&c=238580982&d=283928392&e=23928392
/main/list.jsp?a=323232&c=919210&d=949909402392&b=23231256&e=32938283
/image/gif
/main/list.jsp?a=323232&c=919210

「寂寞烈火」老大的代碼有些問題。如果我提取a,b,c三個參數的值,結果是不正確的。
grep -E -o 'a=[0-9]*|b=[0-9]*|c=[0-9]*' file|xargs -n3|tr -d '[a-z=]'|tr ' ' ','
而且我想要得是一行中三個參數都出現的才提取。缺少某一個著行就認為不匹配。

「waker」老大的每個參數都輸出了,結果也不太對。
sed -ne '/a=/{/b=/{/e=/s/\&/,/gp;};}' aa
輸出結果是:
/main/inde.jsp?a=21212,b=323235223,c=238580982,d=283928392,e=23928392
/main/list.jsp?a=323232,c=919210,d=949909402392,b=23231256,e=32938283

還有一個問題就是三個參數的出現順序不確定。

麻煩各位了。

請教一個分析腳本

-->

請教一個分析腳本

[code]$sed '/.*[ace]=\([0-9]*\).*[ace]=\([0-9]*\).*[ace]=\([0-9]*\).*/!d' file \
> |sed 's/.*a=\([0-9]*\).*c=\([0-9]*\).*e=\([0-9]*\).*/\1,\2,\3/' \
> |sed 's/.*a=\([0-9]*\).*e=\([0-9]*\).*c=\([0-9]*\).*/\1,\3,\2/' \
> |sed 's/.*c=\([0-9]*\).*a=\([0-9]*\).*e=\([0-9]*\).*/\2,\1,\3/' \
> |sed 's/.*c=\([0-9]*\).*e=\([0-9]*\).*a=\([0-9]*\).*/\3,\1,\2/' \
> |sed 's/.*e=\([0-9]*\).*a=\([0-9]*\).*c=\([0-9]*\).*/\2,\3,\1/' \
> |sed 's/.*e=\([0-9]*\).*c=\([0-9]*\).*a=\([0-9]*\).*/\3,\2,\1/' \
>
21212,238580982,23928392
323232,919210,32938283[/code]

沒有具體文件測試,不過應該沒什麼問題,解決了ace位置不定問題



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com