2012-03-02 110 views
0

我有以下幾點:shell腳本pipline給一個變量

FILENAME=$1 
cat $FILENAME | while read LINE 
do 
     response="$LINE" | cut -c1-14 
     request="$LINE" | cut -c15-31 
     difference=($response - $request)/1000 
     echo "$difference" 
done 

當我運行該腳本,它返回空行。我究竟做錯了什麼?

回答

0

您需要將其更改爲:

response=`echo $LINE | cut -c1-14` 
request=`echo $LINE | cut -c15-31` 
difference=`expr $response - $request` 
val=`expr $difference/1000` 
+0

我會試試看。 '和'之間有什麼區別? – Decrypter 2012-03-02 14:45:57

+0

/1000被打印出來。我在val ='expr $ difference/1000'後面加上了echo $ val – Decrypter 2012-03-02 14:50:00

+0

需要'/'附近的空格 - expr需要看到它作爲單獨的參數 – 2012-03-02 17:16:41

0

你基本上做的一切錯誤的;) 這應該會更好:

FILENAME="$1" 
cat "$FILENAME" | while read LINE 
do 
     response=$(echo "$LINE" | cut -c1-14) # or cut -c1-14 <<< "$line" 
     request=$(echo "$LINE" | cut -c15-31) 
     difference=$((($response - $request)/1000) 
     echo "$difference" 
done 
+0

你試過這個嗎?我得到'sh:語法錯誤附近有意想不到的標記'(''。祝大家好運。 – shellter 2012-03-02 15:47:08

+0

試試這個:'difference = $(((response- request)/ 1000)) - 注意shell只做整數運算,所以你可能需要'difference = $(bc -l <​​<<「($ response - $ request)/ 1000」)' – 2012-03-02 17:17:29

+0

@shellter修正了glennjackman:沒錯,不知道是否需要整數運算。 – user123444555621 2012-03-02 21:08:22

1

可能是簡單的AWK:

awk '{print ($1 - $2)/1000}' "$1" 

我假設前14個字符和下17個字符是前兩個空白分隔的字段。

相關問題