Я хотел бы сделать следующее, но не похоже, чтобы быть в состоянии обернуть мой мозг вокруг него сегодня ...Grep файлы, соответствующие результаты Grep из файла
У меня есть номер раздела, например как 45. У меня есть файл данных сотрудников, который заканчивается номером раздела сотрудника. Таким образом, я могу захватить всех сотрудников с помощью:
grep ",45$" /data/employees.dat
Теперь это возвращает что-то вроде следующего. Для краткости я опустил несколько столбцов данных. Первый столбец - это идентификатор. Последний номер раздела.
38275,...some data...,45
4718573,...some data...,45
328,...some data...,45
Теперь, на твердую часть ... В/data - набор каталогов. Каждый каталог имеет имя p ####, где #### - номер сотрудника. Внутри этих каталогов находится набор файлов. Меня интересует /data/p####/contacts.csv. У меня есть ключевое значение («Боб» в этом примере), и я хочу найти каждую строку, содержащую значение ключа в файле contacts.csv для каждого сотрудника предыдущего grep. Я не хочу делать это вручную, потому что в реальной работе я получу несколько тысяч результатов от каждого grep.
grep Bob /data/p38275/contacts.csv
grep Bob /data/p4718573/contacts.csv
grep Bob /data/p328/contacts.csv
Мне кажется, что я должен быть в состоянии Grep на шаблон для имени файла, но тогда я должен гадить первый Grep в качестве шаблона - что я не думаю, что я могу сделать. Если единственное хорошее решение - написать скрипт, чтобы сделать все это вручную, я сделаю это. Прямо сейчас, я возился с sed и awk, чтобы понять, что-то начинает иметь смысл.
Это правильно, но отсутствует половина ответа. Вы должны передать исходный grep в ответ выше, как в: 'grep ', 45 $" /data/employees.dat | grep Bob $ (awk -F, '$ NF == 45 {print "/ data/p" $ 1 "/contacts.csv"}') ' – kainaw
Ah. Нет, я просто забыл имя файла в команде awk - он уже выбирает. Я редактировал это; моя вина. – Wintermute