如何通过标签在korn-shell中查找数据字符串的子字符串

时间:2016-08-08 20:56:05

标签: shell unix awk

我有一个数据字符串,其中包含以下格式的多个属性: 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等...

3 个答案:

答案 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