如何从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
答
grep
和awk
命令几乎总是可以合并成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'
怎么去完成计数?.curl -o Jobs.txt https://test.cmx.com 状态='grep的 “完成” /home/Jobs.txt – user739115
你叫它'text'文件,但是将其封装为XML是微不足道的,那么您将拥有一整套更适合此类查询的工具。不要试图将其转换为shell脚本和'eval' - 这是安全漏洞的秘诀。 –