Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用带有awk的随机模式替换给定模式_Awk - Fatal编程技术网

用带有awk的随机模式替换给定模式

用带有awk的随机模式替换给定模式,awk,Awk,我有一个XML文件,其中有一组条目,如下所示: <attr name="trajectory" value="nodo2"/> 在前一行中,我将用相同的值“nodoR”替换所有“node[0-9]”值。这不是我想要的,我想要用一个随机字符串替换每一行,即“nodoX”,其中X在max_R和min_R之间是随机的。但是,为此,我应该在之前的awk命令中包含随机X的计算。这可能吗 谢谢 Daniel在awk中,连接是你的朋友 awk 'BEGIN{srand();};/"traject

我有一个XML文件,其中有一组条目,如下所示:

<attr name="trajectory" value="nodo2"/>
在前一行中,我将用相同的值“nodoR”替换所有“node[0-9]”值。这不是我想要的,我想要用一个随机字符串替换每一行,即“nodoX”,其中X在max_R和min_R之间是随机的。但是,为此,我应该在之前的awk命令中包含随机X的计算。这可能吗

谢谢


Daniel在awk中,连接是你的朋友

awk 'BEGIN{srand();};/"trajectory"/ {R=rand(); sub(/"nodo[0-9]"/,"nodo" R )}1' $XML_FILE
如果需要一系列可重复的随机数,请使用srand()删除BEGIN块

数学头将精确地添加如何获得最小值和最大值之间的随机值。它涉及max的“%”(模)运算符,但我现在不记得如何强制最小值,除非使用类似
(R>=minVal)
的测试。这需要一个循环,所以可能有一个更简洁的方法


我希望这会有所帮助。

您可以创建一个用户定义的函数,并根据需要传入值。像这样的-

awk 'function randInt(low, hi) {
x = rand()
y = (hi - low) + 1
z = int((x * y) + low)
return z} /"trajectory"/ {x=randInt(100,1000); sub(/"nodo[0-9]"/,"\"nodo"x"\"")}1' XML_FILE
执行:

[jaypal:~/Temp] cat XML_FILE 
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>

[jaypal:~/Temp] awk 'function randInt(low, hi) {
x = rand()
y = (hi - low) + 1
z = int((x * y) + low)
return z} /"trajectory"/ {x=randInt(100,1000); sub(/"nodo[0-9]"/,"\"nodo"x"\"")}1' XML_FILE
<attr name="trajectory" value="nodo857"/>
<attr name="trajectory" value="nodo455"/>
<attr name="trajectory" value="nodo805"/>
<attr name="trajectory" value="nodo819"/>
<attr name="trajectory" value="nodo921"/>
<attr name="trajectory" value="nodo277"/>
<attr name="trajectory" value="nodo402"/>
<attr name="trajectory" value="nodo792"/>
<attr name="trajectory" value="nodo350"/>
<attr name="trajectory" value="nodo599"/>
[jaypal:~/Temp]cat XML\u文件
[jaypal:~/Temp]awk'功能随机数(低、高){
x=rand()
y=(高-低)+1
z=int((x*y)+低)
返回z}/“轨迹”/{x=randInt(1001000);sub(/“nodo[0-9]”,“\“nodo”x“\”)}1'XML\u文件

:)谢谢你@Sheller。所有这些学习都是从遵循你的答案开始的。你的,还有迈克尔·J·巴伯、格伦·杰克曼、肯特和其他几个人。谢谢!这个解决方案是完美的。
[jaypal:~/Temp] cat XML_FILE 
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>
<attr name="trajectory" value="nodo2"/>

[jaypal:~/Temp] awk 'function randInt(low, hi) {
x = rand()
y = (hi - low) + 1
z = int((x * y) + low)
return z} /"trajectory"/ {x=randInt(100,1000); sub(/"nodo[0-9]"/,"\"nodo"x"\"")}1' XML_FILE
<attr name="trajectory" value="nodo857"/>
<attr name="trajectory" value="nodo455"/>
<attr name="trajectory" value="nodo805"/>
<attr name="trajectory" value="nodo819"/>
<attr name="trajectory" value="nodo921"/>
<attr name="trajectory" value="nodo277"/>
<attr name="trajectory" value="nodo402"/>
<attr name="trajectory" value="nodo792"/>
<attr name="trajectory" value="nodo350"/>
<attr name="trajectory" value="nodo599"/>