xargs и grep в скрипте bash

У меня есть скрипт, который берет список слов и ищет их в файле. Я использую xargs, чтобы взять слова из списка и передать их grep.

awk 'BEGIN { FS = ","; } { print $9 }' $file | xargs -I {} grep -w {} $second_file

Первая команда awk ищет 9-й столбец в $file. Он создает список из ~ 50 имен, таких как YHOO, AAPL, LB и т. Д. (Биржевые символы). Затем я передаю результат grep с помощью xargs и ищу уникальные вхождения.

Проблема в том, что grep иногда возвращает правильные символы тикера и другие символы, к которым добавлен .#.

Например:

LB
LB.1

будет возвращено приведенной выше командой.

Файл, в котором выполняется поиск ($second_file выше), выглядит так

2006-09-30      006733  LB      501797104       25504010        10      26.490000       2006-09-30      28.940000       2006-12-31      0.092488

В терминале я могу ввести

grep  '\sLB\s'   $second_file

и он возвращает только LB, а не LB.1, чего я и хочу.

Как я могу реплицировать '\sLB\s' в скрипте, используя xargs? если я напишу

grep '\s{}\s'

в моем скрипте это не работает, все результаты пустые.

Спасибо!


person Luis Ibáñez Herrera    schedule 22.09.2015    source источник


Ответы (1)


Почему бы просто не сохранить его в команде one awk? Из того, что вы нам рассказали, все, что вам нужно, это:

awk 'NR==FNR{ticks[$9]; next} $3 in ticks' FS="," "$file" FS=" " "$second_file"

Если это не дает того, что вы хотите, отредактируйте свой вопрос, чтобы уточнить свои требования и предоставить более репрезентативный ввод/вывод.

person Ed Morton    schedule 22.09.2015
comment
Это сработало! Я должен был быть более ясным. Мой вопрос будет таким: если в командной строке я наберу grep '\sLB\s' $file, как я могу воспроизвести это в сценарии bash, используя xargs, где LB будет аргументом, переданным {} - person Luis Ibáñez Herrera; 22.09.2015
comment
Бьет меня, я бы никогда не использовал такие xargs. - person Ed Morton; 22.09.2015