2013-03-28 98 views
1

在UNIX shell中,我有一個txt文件(Price.txt)包含以下信息:獲得價值,做計算

Buy value: 15 
Sell value: 30 

我可以知道如何使用的命令可以grep購買價值和銷售價值(整數),然後做他們之間的差異,存儲在一個新的變量?

回答

4

下面是一個簡單的腳本awk將打印相比,買了價值(並不重要至上文件中)出售價值之間的差額

$ awk '/Buy value/{b=$3}/Sell value/{s=$3}END{print s-b}' file 
15 

或者,如果你知道Buy value始終是第一位的,你可以是一個小更簡潔:

$ awk '/Buy value/{b=$3}/Sell value/{print $3-b}' file 
15 

如果這些是僅有的兩個文件中的行:

$ awk '{b?b=$3-b:b=$3}END{print b}' file 
15 

但第一個腳本是最強大和最容易修改,如果你需要做的更多。

這一結果存儲在一個shell變量簡單做:

$ diff=$(awk '/Buy value/{b=$3}/Sell value/{s=$3}END{print s-b}' file) 

$ echo $diff 
15 
+0

感謝您的幫助! 我可以知道「$ 3」的含義是什麼? 還有一個問題: 如果在「購買價值」之前有一個時間戳,該怎麼辦? 即 130324_102345購買價值:15 130325_102412賣出價值:30 – yamcake01096 2013-03-29 02:03:46

1

一個非常基本的方法是:

buy=$(tail -1 YOUR_FILE | cut -d: -f2) 
sell=$(head -1 YOUR_FILE | cut -d: -f2) 
echo "the result is $(($sell - $buy))" 
+2

感謝沒有評論downvoting! – fedorqui 2013-03-28 09:16:48

+0

我喜歡編輯@sudo_O,但我更喜歡在評論中提示它,而不是編輯我的答案。 – fedorqui 2013-03-28 09:26:50

+0

我發現評論混亂..我發佈''你應該放棄UUoC''作爲評論,你修復你的答案並留下另一個評論,同樣的結果發生,但與減少答案的unessercery評論。 F.Y.I *你的*答案不是你的答案,現在屬於社區。如果我看到有可以改進的地方,我會做到的。查看官方詞彙http://stackoverflow.com/faq#editing的常見問題解答 – 2013-03-28 09:30:29

0

這裏是不使用任何外部程序的純殼溶液:

#!/bin/bash 

diff=0 
while read bs value amount 
do 
    if [[ $bs == Buy ]] 
    then 
     diff=$((diff - amount)) 
    elif [[ $bs == Sell ]] 
    then 
     diff=$((diff + amount)) 
    else 
     echo "$bs ignored!" >&2 
    fi 

done < Price.txt 

echo "Difference: $diff"