2017-01-09 6 views
-1

У меня есть следующий файл test.txt с двумя линиямиКак я могу запустить «ack» в bash и сохранить вывод в файл?

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

и хотел бы ack для keyword1 и keyword2. Я называю этот скрипт

#!/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 keyword 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

Похоже, что мой ответ был неправильным, и что это правильно, поздравляем с исправлением. –

+0

Обязательно укажите свои переменные. Если, скажем, 'outputpath' был' my output dir', ваше перенаправление не будет работать так, как вы хотите. Аналогичные проблемы для «работы» и других переменных –