Как я могу запустить ack в bash и сохранить вывод в файл?

У меня есть следующий файл test.txt с двумя строками

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

и хотел бы подтвердить для 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, потому что просто запуск этой команды дает пустой результат.


person tenticon    schedule 09.01.2017    source источник
comment
Почему вы используете обратную косую черту во внешних двойных кавычках?   -  person choroba    schedule 09.01.2017
comment
Если я просто использую ключевое слово $, он выполнит ack keyword 1 test.txt, но я хочу ack "keyword 1" test.txt   -  person tenticon    schedule 09.01.2017
comment
@tenticon Нет, это неправильно.   -  person melpomene    schedule 09.01.2017
comment
Ваши кавычки в первых трех строках как бы задом наперёд. Во всяком случае, вы хотите заключать в кавычки переменные, а не фиксированные строки: OUTPUTPATH="$1"/; JOB="$2"; ID=_"$3".csv. Но вы должны использовать имена переменных в нижнем регистре; Переменные ALL_UPPERCASE предназначены для системы.   -  person melpomene    schedule 09.01.2017
comment
Кроме того, вы можете удалить пробел с помощью ${keyword/ }, без внешней команды.   -  person choroba    schedule 09.01.2017
comment
@choroba Или trKeyWord="${keyword// }", чтобы удалить все пробелы.   -  person melpomene    schedule 09.01.2017


Ответы (1)


Хорошо, ребята, это окончательный (рабочий) ответ:

outputpath="$1"/
job="$2"
id=_"$3".csv
for keyword in "${@:4}"
do
  trKeyWord=${keyword// }
  ack "$keyword" $job > $outputpath$trKeyWord$id
done
person tenticon    schedule 09.01.2017
comment
Упс, кажется, мой ответ был неправильным, а этот правильным, поздравляю с исправлением. - person ; 09.01.2017
comment
Не забудьте указать свои переменные. Если бы, скажем, outputpath было my output dir, ваше перенаправление не работало бы так, как вы хотите. Аналогичные проблемы с job и другими переменными. - person Eric Renouf; 09.01.2017