2015-09-22 2 views
0

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

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

Первая команда awk выполняет поиск 9-го столбца в $ файле. Он создает список из 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' 

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

Спасибо!

ответ

1

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

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

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

+1

Это сработало! Я должен был быть более ясным. Мой вопрос: если в командной строке я набираю 'grep '\ sLB \ s' $ file', то как я могу реплицировать это в bash-скрипте, используя' xargs', где 'LB' будет аргументом, переданным' {} ' –

+0

Бьет меня, я никогда не буду использовать такие харги. –

Смежные вопросы