String 如何将文本文件内容替换为';sed';或';awk&x27;基于来自不同命令的多行打印输出的输入?
模板文件内容(Template.txt): 我的目标是使用新文件作为目标(而不是覆盖模板),用相应的数据替换所有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=
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>