2017-01-09 91 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'是'我的输出目录',那么你的重定向就不会按照你想要的方式工作。对“工作”和其他变量也有类似的担忧 –