如何从shell脚本中的文本文件中检索数值?

问题描述:

下面的内容已被写入名为test.txt的文本文件中。我如何在shell脚本中检索待完成的计数值&? 如何从shell脚本中的文本文件中检索数值?

<p class="pending">Count: 0</p> 
<p class="completed">Count: 0</p> 

这里是我的尝试:

#!/bin/bash 

echo 
echo 'Fetching job page and write to Jobs.txt file...' 
curl -o Jobs.txt https://cms.test.com 

completestatus=`grep "completed" /home/Jobs.txt | awk -F "<p|< p="">" '{print $2 }' | awk '{print $4 }'` 
echo $completestatus 
if [ "$completestatus" == 0 ]; then 
+0

怎么去完成计数?.curl -o Jobs.txt https://test.cmx.com 状态='grep的 “完成” /home/Jobs.txt – user739115

+0

你叫它'text'文件,但是将其封装为XML是微不足道的,那么您将拥有一整套更适合此类查询的工具。不要试图将其转换为shell脚本和'eval' - 这是安全漏洞的秘诀。 –

grepawk命令几乎总是可以合并成1个awk命令。并且命令也几乎总是可以组合成1 awk命令。

这解决了你的直接问题(使用一个小awk类型的铸造诡计)。

completedStatus=$(echo "<p class="pending">Count: 0</p>^J 
     <p class="completed">Count: 0</p>" \ 
    | awk -F : '/completed/{var=$2+0.0;print var}') 
echo completedStatus=$completedStatus 

输出是

completedStatus=0 

注意,您可以用

awk -F : '/completed/' test.txt 

过滤器刚刚完成的线面相结合grep和awk,输出

<p class=completed>Count: 0</p> 

当我加入你的-F参数,输出没有变化,即

awk -F'<p|< p="">' '/completed/' test.txt 

输出

<p class=completed>Count: 0</p> 

所以我使用:作为-F(字段分隔符)依赖。现在的输出是

awk -F : '/completed/{print $2}' 

输出

0</p> 

当执行计算,awk将读出的值“看”为一些在前面,如果它发现了一些,将读取数据直到找到一个非数字(或者如果没有剩下的东西)。所以......

awk -F : '/completed/{var=$2+0.0;print var}' test.txt 

输出

0 

最后,我们在解决时以上,包装代码在现代命令替换,即​​3210和输出发送到completedStatus=分配。


如果你正在考虑的是,除了+0.0什么正在输出,你可以改变你的文件,以显示已完成数= 10,输出将是10。

IHTH

另一awk

completedStatus=$(awk -F'[ :<]' '/completed/{print $(NF-1)}' file) 

如果我有你的权利,你只是要提取未完成或者完成和值。如果是这样的话,

然后使用SED,

请看看下面的脚本。 Output shared via picture, please click to see

#!/bin/bash 

file="$1" 

echo "Simple" 

cat $1 |sed 's/^.*=\"\([a-z]*\)\">Count: \([0-9]\)<.*$/\1=\2/g' 

echo "Pipe Separated" 

cat $1 |sed 's/^.*=\"\([a-z]*\)\">Count: \([0-9]\)<.*$/\1|\2/g' 

echo "CSV Style or comma separeted" 

cat $1 |sed 's/^.*=\"\([a-z]*\)\">Count: \([0-9]\)<.*$/\1,\2/g'