UNIX シェルには、次の情報を含む txt ファイル (Price.txt) があります。
Buy value: 15
Sell value: 30
買い値と売り値(整数)をgrepして、それらの差を新しい変数に保存できるコマンドの使い方を教えてください。
以下は、売値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
そして、これらがファイル内の 2 行のみの場合:
$ awk '{b?b=$3-b:b=$3}END{print b}' file
15
ただし、最初のスクリプトは最も堅牢であり、さらに多くのことを行う必要がある場合は簡単に変更できます。
この結果をシェル変数に保存するには、次のようにします。
$ diff=$(awk '/Buy value/{b=$3}/Sell value/{s=$3}END{print s-b}' file)
$ echo $diff
15
非常に基本的な方法は次のとおりです。
buy=$(tail -1 YOUR_FILE | cut -d: -f2)
sell=$(head -1 YOUR_FILE | cut -d: -f2)
echo "the result is $(( $sell - $buy ))"
以下は、外部プログラムを使用しない純粋なシェル ソリューションです。
#!/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"