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

Chinaunix

標(biāo)題: [awk] 如何高效提取如下內(nèi)容 [打印本頁(yè)]

作者: jinl    時(shí)間: 2008-06-10 14:28
標(biāo)題: [awk] 如何高效提取如下內(nèi)容
每個(gè)字段形如 <data name="CYRSBH" value="320400725220211"/>,如何高效的提取value="*****"中間的***
望各位不吝賜教
作者: 寂寞烈火    時(shí)間: 2008-06-10 14:34
sed 's/.*value=\"\(.\+\)\"\/.*/\1/'
作者: squallabc    時(shí)間: 2008-06-10 14:41
awk -F"\"" '{print $4}' file
這個(gè)意思?
作者: chzht001    時(shí)間: 2008-06-10 14:42
原帖由 squallabc 于 2008-6-10 14:41 發(fā)表
awk -F"\"" '{print $4}' file
這個(gè)意思?


搶了先,

[ 本帖最后由 chzht001 于 2008-6-10 14:44 編輯 ]
作者: blackold    時(shí)間: 2008-06-10 14:46
標(biāo)題: 回復(fù) #1 jinl 的帖子
try:
  1. cut -d \" -f 4 urfile
復(fù)制代碼

作者: jinl    時(shí)間: 2008-06-10 14:47
原帖由 squallabc 于 2008-6-10 14:41 發(fā)表
awk -F"\"" '{print $4}' file
這個(gè)意思?

非也,現(xiàn)在是$1=<data name="CYRSBH" value="320405570118042"/>,想再解析出value="***",賦值給其他變量使用
作者: doctorjxd    時(shí)間: 2008-06-10 14:50
原帖由 寂寞烈火 于 2008-6-10 14:34 發(fā)表
sed 's/.*value=\"\(.\+\)\"\/.*/\1/'



分步操作,速度更快。


  1. sed 's/.*value=\"//; s/\"\/.*//;'
復(fù)制代碼

作者: zhao3stones    時(shí)間: 2008-06-10 15:02
aa='<data name="CYRSBH" value="320400725220211"/>'
echo $aa|sed 's/.*\(value=.\+\)\/.*/\1/'

結(jié)果:value="320400725220211"
作者: jinl    時(shí)間: 2008-06-10 15:17
感謝大家積極回復(fù),不過我是要取出value="**"中的***判斷其值再處理其他字段,所以最好提供一個(gè)awk里面的方法,gsub()效率如何?
作者: dashorc    時(shí)間: 2008-06-10 15:19
sed 's/.*value=\"\(.\+\)\"\/.*/\1/'
請(qǐng)教下最后的/\1/是什么意思?
作者: liaosnet    時(shí)間: 2008-06-10 15:19
標(biāo)題: 回復(fù) #1 jinl 的帖子
awk -F'"' '{print $4}' ufile..
作者: liaosnet    時(shí)間: 2008-06-10 15:20
標(biāo)題: 回復(fù) #3 squallabc 的帖子
額..沒看到.. 水一帖.......
作者: zhao3stones    時(shí)間: 2008-06-10 15:33
標(biāo)題: 回復(fù) #9 jinl 的帖子
3樓不是給了嗎?實(shí)在不清楚你到底要啥,你倒是說啊,不說我咋知道你要啥,說了有人會(huì)高訴你。。。
作者: ly5066113    時(shí)間: 2008-06-10 15:34
樓主說說原始的需求吧,只是現(xiàn)在這樣的話,我能想到的就2個(gè)辦法:
1、sub  2次
2、split

沒做實(shí)驗(yàn),感覺應(yīng)該sub快點(diǎn)吧。
作者: jinl    時(shí)間: 2008-06-10 16:05
簡(jiǎn)單點(diǎn)說,就是一個(gè)xml文件,里面每個(gè)字段類似于我描述的樣子,還有一些標(biāo)記
我要把這些字段提取出來重新排列,同時(shí)還要根據(jù)某些字段的value值,生成新的字段。所以不想采用用FS="\""這樣去分割,只想對(duì)特定的字段提取value值,ly兄說兩次sub 更快,有根據(jù)么?
作者: ly5066113    時(shí)間: 2008-06-10 16:23
原帖由 jinl 于 2008-6-10 16:05 發(fā)表
簡(jiǎn)單點(diǎn)說,就是一個(gè)xml文件,里面每個(gè)字段類似于我描述的樣子,還有一些標(biāo)記
我要把這些字段提取出來重新排列,同時(shí)還要根據(jù)某些字段的value值,生成新的字段。所以不想采用用FS="\""這樣去分割,只想對(duì)特定的 ...


因?yàn)閟plit會(huì)生成數(shù)組,sub只用正則,所以我覺得sub會(huì)快點(diǎn)。
作者: jinl    時(shí)間: 2008-06-10 16:27
原帖由 ly5066113 于 2008-6-10 16:23 發(fā)表


因?yàn)閟plit會(huì)生成數(shù)組,sub只用正則,所以我覺得sub會(huì)快點(diǎn)。

這個(gè)說法也有道理,回頭我有空測(cè)試一下
作者: woodie    時(shí)間: 2008-06-10 16:49
原帖由 jinl 于 2008-6-10 16:05 發(fā)表
簡(jiǎn)單點(diǎn)說,就是一個(gè)xml文件,里面每個(gè)字段類似于我描述的樣子,還有一些標(biāo)記
我要把這些字段提取出來重新排列,同時(shí)還要根據(jù)某些字段的value值,生成新的字段。所以不想采用用FS="\""這樣去分割,只想對(duì)特定的 ...


XML文件解析用perl較好,awk做這個(gè)不是強(qiáng)項(xiàng)。如果是gawk還好點(diǎn),unix平臺(tái)上的awk就很麻煩了。個(gè)人推薦用正則做,xml的語(yǔ)法中字段的位置是沒關(guān)系的,沒法預(yù)測(cè)哪個(gè)字段一定出現(xiàn)在哪個(gè)位置。比如我寫:
<data value="320400725220211" name="CYRSBH"/>

<data name="CYRSBH" value="320400725220211"/>
一樣是合法的。
作者: squallabc    時(shí)間: 2008-06-10 17:02
awk 'split($0,a,"\""){print a[4]}' urfile
作者: xyzlsh    時(shí)間: 2008-06-10 17:13
cut -d" " -f3 urfile | sed 's/\/>,//g'

1. 先以空格為分隔符提取value="..."/>,
2. 通過sed刪除/>,

不知道是否滿足要求。
作者: xyzlsh    時(shí)間: 2008-06-10 17:15
或者:
grep -o "v.*\"" urfile
好像也行。
作者: springwind426    時(shí)間: 2008-06-10 21:08

  1. awk '{match($0,/value="[^"]*"/);value=(RSTART)?substr($0,RSTART+7,RLENGTH-8):"";print value}'
復(fù)制代碼


match是用來測(cè)試是否匹配的,如果有匹配的,那么RSTART就是匹配的起始字符,RLENGTH就是匹配的長(zhǎng)度

substr是用來取子字符串的,因?yàn)樾枰裿alue=""這8個(gè)字符去掉,因此需要用RLENGTH-8,因?yàn)樾枰ヅ涞膙alue的起始位置是"中間的內(nèi)容,因此需要將RSTART+7

我是用gawk測(cè)試的,不過match和substr函數(shù)很多awk都有(我用busybox的awk和mawk測(cè)試也是可行的)

我是對(duì)整個(gè)行進(jìn)行匹配的,如果不想對(duì)整個(gè)行進(jìn)行匹配(比如$1),那么把$0替換成$1就可以了。

解釋:
match($0,/value="[^"]*"/)  對(duì)內(nèi)容進(jìn)行匹配,正則表達(dá)式是 value="[^"]*"/
value=(RSTART)?substr($0,RSTART+7,RLENGTH-:""  先判斷是否有匹配,如果沒有,就用空值,否則,就取子串  賦給變量value

[ 本帖最后由 springwind426 于 2008-6-10 21:14 編輯 ]
作者: __lxmxn__    時(shí)間: 2008-06-11 05:07
處理 XML ?

試試 xmlStarLet :
http://www.72891.cn/thread-1091183-1-1.html




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2