我有一个数据字符串,其中包含以下格式的多个属性: PNO25 | DNO9 | NWT153 | NAM579 | NPC3 |
所以属性是PNO,DNO,NWT,NAM,NPC
请注意,属性并不总是以相同的顺序,并且值可能具有不同的长度(即,我的DNO9高于DNO的值为9,但它可能是DNO23或DNO152,其值为23或152分别地)
我需要能够从此数据字符串中检索属性的值。
在korn shell脚本中从此数据字符串中提取任何属性值的最佳方法是什么?为简单起见,我们只需检索DNO的值即可。
我不是一个经验丰富的shell程序员...我在我的智慧结束时尝试了我最好的谷歌搜索korn-shell,使用awk,grep等...
答案 0 :(得分:0)
只需提取一个标记值,就可以试试这个
$ awk -F'|' '{for(i=1;i<=NF;i++) if(match($i,/^DNO/)) {sub(/DNO/,"",$i); print $i}}' file
9
得到一个字典,比如name:value pair的输出,也许这更容易......
$ tr '|' '\n' <file |
sed -r 's/([A-Z]+)([0-9]+)/\1:\2/g;/^$/d' |
sort
DNO:9
NAM:579
NPC:3
NWT:153
PNO:25
答案 1 :(得分:0)
您可以使用
将它们导出到shell变量中temp
答案 2 :(得分:0)
$ awk -v RS='|' 'sub(/^DNO/,"")' file
9
$ awk -v RS='|' 'sub(/^NWT/,"")' file
153
或者如果在shell变量中有目标名称:
$ tgt="NAM"; awk -v RS='|' -v tgt="$tgt" 'sub("^"tgt,"")' file
579
$ tgt="NAM"; val=$(awk -v RS='|' -v tgt="$tgt" 'sub("^"tgt,"")' file); echo "$val"
579