2017-01-09 97 views
-1

我有兩行如何在bash中運行「ack」並將輸出保存到文件中?

keyword 1, 2010-10-01 | 1 | 2 | 3 | 4 
keyword 2, 2010-10-01 | 1 | 2 | 3 | 4 

以下test.txt文件,並想爲ackkeyword1keyword2。我把這個腳本

#!/bin/bash 

OUTPUTPATH=$1"/" 
JOB=$2 
ID="_"$3".csv" 

for keyword in "${@:4}" 
do 
     trKeyWord=$(echo "$keyword" | sed 's/ //g') 
     ack \""$keyword"\" $JOB > $OUTPUTPATH$trKeyWord$BSLD_ID 
done 

通過

bash script.sh /home/username/ test.txt test "keyword 1" "keyword 2" 

的輸出中的文件keyword1_test.csv,創建keyword2_test.csv,但它們是空的!問題一定是我如何使用ack \""$keyword"\" $JOB,因爲只是運行這個命令給出了一個空的結果。

+2

你爲什麼反斜線外雙引號? – choroba

+0

如果我只是使用「$關鍵字」它將執行'ack關鍵字1 test.txt',但我想'ack「關鍵字1」test.txt' – tenticon

+2

@tenticon不,這是錯誤的。 – melpomene

回答

2

好了傢伙,這是最後的(工作)答案:

outputpath="$1"/ 
job="$2" 
id=_"$3".csv 
for keyword in "${@:4}" 
do 
    trKeyWord=${keyword// } 
    ack "$keyword" $job > $outputpath$trKeyWord$id 
done 
+0

Woops,看來我的回答是錯誤的,而且這個是正確的,恭喜修正。 – 2017-01-09 16:24:21

+0

一定要引用你的變量。如果,例如'outputpath'是'我的輸出目錄',那麼你的重定向就不會按照你想要的方式工作。對「工作」和其他變量也有類似的擔憂 –