“解释”;sed";在shell命令中
我使用以下命令从多个文件中提取第一个“结果”,并将其写入一个文件中“解释”;sed";在shell命令中,sed,Sed,我使用以下命令从多个文件中提取第一个“结果”,并将其写入一个文件中 for file in *.xml; do cat $file | grep result | sed -n 2p | sed s:"<result>":"": | sed s:"</result>":"": >> tmp.txt; done 用于*.xml格式的文件;do cat$file | grep result | sed-n 2p | sed s::::::;sed s::::::
for file in *.xml; do cat $file | grep result | sed -n 2p | sed s:"<result>":"": | sed s:"</result>":"": >> tmp.txt; done
用于*.xml格式的文件;do cat$file | grep result | sed-n 2p | sed s::::::;sed s::::::::>>tmp.txt;完成
两年后我正在查看它,我不记得我是如何从其中两个(第二个是-0.083118623723832552)的文件中获取第一个“结果”(0.0183006384717713)中的数字的,这些文件看起来如下:
<?xml version="1.0" encoding="UTF-8"?>
<fit_results>
<input_file>/Users/hunululu/Desktop/current/m203/ratios/tmp.xml</input_file>
<time>Fri Oct 17 17:45:51 2014</time>
<fit_converged>true</fit_converged>
<iterations>3</iterations>
<dof>1</dof>
<chi_sqr_per_dof>0.088802954844880599</chi_sqr_per_dof>
<Q>0.76570450204332174</Q>
<parameter_values>
<parameter>
<name>a</name>
<result>0.018300606384717713</result>
<error>0.0090474462765945517</error>
</parameter>
<parameter>
<name>b</name>
<result>-0.083118623723832552</result>
<error>0.045747262135131625</error>
</parameter>
</parameter_values>
</fit_results>
/用户/hunulu/Desktop/current/m203/rations/tmp.xml
2014年10月17日星期五17:45:51
真的
3.
1.
0.088802954844880599
0.76570450204332174
A.
0.018300606384717713
0.0090474462765945517
B
-0.083118623723832552
0.045747262135131625
有人能帮我理解它是如何得到第一个结果而不是第二个结果的吗?谢谢。这里的钥匙是
2p
p
表示打印当前图案空间。但是如果您在它前面加上一些数字i
,这意味着在模式空间中打印i的第
行
在您的情况下,grep
之后的模式空间是:
<fit_results>
<result>0.018300606384717713</result>
<result>-0.083118623723832552</result>
</fit_results>
0.018300606384717713
-0.083118623723832552
因此,
2p
将拾取其中的第二行,从而获取第一个结果 更基本的问题是,任何时候在shell中编写循环只是为了操纵文本,都有错误的方法。您的整个命令行可以简化为:
awk -F'[<>]' 'FNR==1{cnt=0} /result/&&(++cnt==2){print $3}' *.xml > tmp.txt
awk-F'[]”FNR==1{cnt=0}/result/&(++cnt==2){print$3}'*.xml>tmp.txt
谢谢。现在,帮自己一个忙并对代码进行注释是有道理的!我刚和一个同事谈过。评论下一个家伙,很可能是你自己,因为你已经忘记了你以前做过什么。有趣的是,这是紧接着发生的。:-)是的,我应该。谢谢你的建议最好的答案!另一方面,我想说这是xmllint
的任务,非常感谢。这确实有助于更好地理解