Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
String 如何将文本文件内容替换为';sed';或';awk&x27;基于来自不同命令的多行打印输出的输入?_String_Bash_Replace_Awk_Sed - Fatal编程技术网

String 如何将文本文件内容替换为';sed';或';awk&x27;基于来自不同命令的多行打印输出的输入?

String 如何将文本文件内容替换为';sed';或';awk&x27;基于来自不同命令的多行打印输出的输入?,string,bash,replace,awk,sed,String,Bash,Replace,Awk,Sed,模板文件内容(Template.txt): 我的目标是使用新文件作为目标(而不是覆盖模板),用相应的数据替换所有CPU-x标签: 结果文件(Result.txt): [加载] 我只是不知道如何在一个命令中完成它,而不为每个数据替换执行四次mpstat——考虑到它可能导致的延迟,这不是一个解决方案 提前谢谢你的帮助 awk'FNR==NR{a[i++]=$1;next}{if($1~/CPU-ALL | CPU-[0-9]+/)sub(/|/,“”)}1'result.txt awk 'FNR=

模板文件内容(Template.txt):

我的目标是使用新文件作为目标(而不是覆盖模板),用相应的数据替换所有
CPU-x
标签:

结果文件(Result.txt):

[加载]
我只是不知道如何在一个命令中完成它,而不为每个数据替换执行四次mpstat——考虑到它可能导致的延迟,这不是一个解决方案

提前谢谢你的帮助

awk'FNR==NR{a[i++]=$1;next}{if($1~/CPU-ALL | CPU-[0-9]+/)sub(/|/,“”)}1'result.txt
awk 'FNR==NR{a[i++]=$1;next}{if($1~/CPU-ALL|CPU-[0-9]+/) sub(/<CPU-ALL>|<CPU-[0-9]+>/,"<"a[j++]">")}1' <(mpstat -P ALL | awk '$12 ~ /[0-9.]+/ { print 100 - $12 }') template.txt > result.txt
我的模板:

[load]
 <CPU-ALL>
 <CPU-0>
 <CPU-1>
[加载]
输出:

[load]
 <52.3>
 <53.69>
 <50.92>
[加载]

您的模板还包含其他内容吗?嗨,阿什坎,是的,它包含其他内容。这就是为什么我认为应该使用sed-I's/original/new'result.txt(可能是先将template.txt复制到result.txt)。感谢您的帮助,但它会给我以下错误消息:
语法错误:(“意外的
@Akos,这使用了posix模式下不可用的进程替换,因此如果您现在正在执行此操作,请不要通过sh运行它,而是使用bash。如果未启用posix,您也可以通过set+o posix启用它。抱歉,我对此非常陌生。如果我通过bash执行它。/script.sh,那么它会告诉我模板不存在:
awk:无法打开模板(没有这样的文件或目录)
。输入文件不应该是template.txt吗(无论如何,我已经试过了,同样的错误)。我也没有看到您编写的命令中提到的result.txt。我遗漏了什么吗?谢谢。@Akos,是的,它必须是template.txt或任何模板文件名。要在文件名result.text中获得结果,您应该将输出重定向到它。无论如何,我编辑了它。
awk 'FNR==NR{a[i++]=$1;next}{if($1~/CPU-ALL|CPU-[0-9]+/) sub(/<CPU-ALL>|<CPU-[0-9]+>/,"<"a[j++]">")}1' <(mpstat -P ALL | awk '$12 ~ /[0-9.]+/ { print 100 - $12 }') template.txt > result.txt
[load]
 <CPU-ALL>
 <CPU-0>
 <CPU-1>
[load]
 <52.3>
 <53.69>
 <50.92>