2016-02-29 83 views
0

我在一個文件中有很多值,在一行中我得到一個空值。空值將作爲該文件中的最後一個值。我想避免空值並從文件中取出最後一個整數值。任何人都可以幫我用正則表達式來做到這一點。我可以發佈我在這裏試過的東西。shell腳本:當我從文件讀取值時如何避免空字符

value=`cat $working_tmp_dir/numbers.txt|tail -3| head -1|cut -f2 -d'='|cut -b 1-8` 

當我試着上述我沒有得到最後的整數值..它給我空。

中的文件樣本值是:

date=11052015 
date=11062015 
date=11092015 
date=11122015 
date=11192015 
date=12172015 
date=20160202 
date="null value coming here" 

的空間數之間只是形式問題。 請幫助我。

+0

你可以添加你分析你的問題文件的樣本內容? – jkdba

+0

編輯樣品的問題..謝謝 – sarath

+0

你是什麼意思的'null'?空行?單詞'null'?並且你在問題中粘貼的數據似乎不是來自文件(或文件)的數據,至少根據你提出的shell命令,這個命令需要一行'something = something'的行(並且只輸出一行)。總之,請更清楚的問題陳述。 – rici

回答

0

你可以用awk來分析你的文件,得到匹配模式的最後一行。

根據您的樣品輸出更新,你可以這樣,如果行開始date=

value=$(awk '/date=[0-9]/{a=$0}END{print a}' $working_tmp_dir/numbers.txt | grep -oP "\d+") 

這會發現,以數字開頭線,將其設置爲可變a它會爲每場比賽做到這一點,結果最後的匹配將會是變量的最終值。你

也可以這樣做:

value=$(tail -n2 $working_tmp_dir/numbers.txt | grep -m1 -oP "(?<=date=)\d+$") 

因此,基於樣本輸入,這將設置變量value20160202

0

awk命令應該工作:

awk -F= '$2+0 == $2{n=$2} END{print n}' file 

20160202 

$2+0 == $2將是真實的,只有當$2代表一個數字。

+0

anubhava ..所以哪個變量將存儲的價值?那是'n'? – sarath

+0

如果你想在shell中使用變量,請使用:'num = $(awk -F ='$ 2 + 0 == $ 2 {n = $ 2} END {print n}'文件)' – anubhava

+0

no anubhava ..我仍然嘗試沒有得到價值..我正在做一個數據加載配置單元表使用此值。所以我使用日期作爲分區鍵,我得到錯誤,因爲我得到空值作爲分區。我仍然無效。如果最後一行像日期=「某個字符」,它會在上述解決方案中工作嗎?我正在努力整天。我必須爲此找到一個解決方案。 – sarath

0

以下任何原因是不夠的?

egrep '^[0-9]+$' your_file | tail -1 

你只需用grep過濾只有整數的行,然後用尾部選擇最後一行。

0

感謝所有的評論..我嘗試了你們發佈的一切,也做了一些自己的修改,並從你們那裏學到了很多東西。非常感謝。 atlast我嘗試這樣做,我得到了解決

value=`grep -Po "=\d+" $working_tmp_dir/numbers.txt |tail -1| sed 's/=//'` 

這對我來說是完美的工作....

相關問題