2016-10-04 53 views
1

下面的內容已被寫入名爲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' - 這是安全漏洞的祕訣。 –

回答

1

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

1

另一awk

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

如果我有你的權利,你只是要提取未完成或者完成和值。如果是這樣的話,

然後使用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' 
相關問題