2016-05-09 45 views
0

我正在編寫一個腳本,它從文件中提取兩個值,然後減去它們。但我無法執行減法,因爲它引發錯誤。無法在shell腳本中減去兩個變量

res1= awk 'FNR == '${num1}' {print $1}' /home/shell/test.txt 
    res2= awk 'FNR == '${num2}' {print $1}' /home/shell/test.txt 

    res= $((res2 - res1)) 
    echo $res 

我也試過expr = `expr $res2 -$res1`但它沒有工作。請幫助我以獲得理想的結果。

+1

可能重複[在Bash中減去2個變量](http://stackoverflow.com/questions/8385627/subtract-2-variables-in-bash) – arved

回答

1

您爲res1/res2的作業是錯誤的。它應該是

res1=$(awk 'FNR == '${num1}' {print $1}' /home/shell/test.txt) 

但是,你可以做到這一切在awk

$ num1=5; num2=2; awk -v n1=${num1} -v n2=${num2} 'FNR==n1{r1=$1;f1=1} 
                FNR==n2{r2=$1;f2=1} 
                f1&&f2{print r1-r2; exit}' <(seq 5) 
3 
+0

謝謝@karakfa。它解決了我的問題。 – Ashish

0

這是因爲每個=符號後一個space字符:res1= awk

刪除空格和使用$(command)執行命令並收集其輸出。

試用一下這個:

res1="$(awk -v num=${num1} 'FNR == num {print $1}' /home/shell/test.txt)" 
res2="$(awk -v num=${num2} 'FNR == num {print $1}' /home/shell/test.txt)" 
res=$((res2 - res1)) 
printf "%d\n" ${res} 

我在另一個答案,它最好使用-v var_name=value,而不是連接字符串變量的值傳遞給awk腳本讀取。