Сценарий оболочки [используйте Grep для поиска файлов и извлечения определенных строк шаблона] - PullRequest
0 голосов
/ 19 октября 2019

Я использую следующий простой сценарий оболочки, чтобы прочитать файл транзакции по содержимому мастер-файла и просто вывести соответствующие строки из файла транзакции.

Файл транзакции содержит:

this is a sample line - first
this is a sample line - second
this is a sample line - nth line

Мастер-файл содержит:

first

Вывод:

this is a sample line - first
for tranfile in transactionfile.txt
do
  grep -f  MasterFile.txt $tranfile >> out.txt
done

PS: Когда я выполняю эту строку за пределами приведенного выше сценария шелла, он работает как шарм;Просто это не вернется в этом сценарии оболочки.

Чего мне не хватает ???

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Я бы сделал это, используя awk

awk 'NR==FNR {a=$0;next} $0~a' master transaction
  • FNR==NR {a=$0;next}, хранит данные из файла master в переменной a
  • $0~a testкаждая строка transaction, если она содержит переменную a, если это так, то действие по умолчанию выводит строку.

Если мастер-файл содержит более одного слова. Проверьте последнее поле для всех слов, как это:

awk 'FNR==NR {a[$0];next} $NF in a' master transaction

Если слово может быть в любом месте строки:

awk 'FNR==NR {a[$0];next} {for (i in a) if ($0~i) print}' master transaction
0 голосов
/ 19 октября 2019

Без выходного текста скрипта, зная, какая оболочка, я только догадываюсь, но я подозреваю, что либо вы не можете найти grep в $ PATH (или используете другую версию grep), либо не можете найти один из файлов иливы выполняете оболочку в командной строке и другую другую оболочку в сценарии.

Попробуйте добавить shebang в сценарий с правильной оболочкой и попытаться указать путь grep (обычно / bin/ grep или / usr / bin / grep), а также добавьте полный путь к нужным файлам.

Чтобы помочь в отладке, я предлагаю добавить set -x в начало скрипта, так чтооболочка выведет то, что делает, и вы можете заметить, чего не хватает. Этот set -x может быть заменен параметром -x в shebang (пример #!/bin/bash -x)

set -x также работает в командной строке, используйте set +x, чтобы отключить его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...