Если данные в FileA являются одним RID на строку, то очевидным выбором является (классически) fgrep
или (используя более современные обозначения) grep -F
. POSIX нестандартизирован fgrep
(заменяя его grep -F
) в версии 2004 года. Однако fgrep
имеет очень длинную родословную; например, он был частью 7-го издания UNIX ™ около 1978 года.
fgrep -f FileA FileB
grep -F -f FileA FileB
Если данные в FileA не указаны в формате «один RID в строке», сделайте так!
Но это fgrep чтения I/P из консоли
Это если вы скажете ей, но вы не хотите, чтобы читать из консоли; вы хотите, чтобы он читался со стандартного ввода. «Консольный ввод» означает «вы печатаете», грубо говоря. (То есть, я проверил поведение grep -F
с помощью grep -F -f - /etc/passwd
, а затем ввести /bin/
на «консоли» (терминал), а затем указал EOF. Он работал отлично.)
Если вы используете bash
, вы можете использовать «процесс замена», чтобы получить результат, который вы хотите:
grep -F -f <(zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2) FileB
подмена процесса выполняет команду внутри <(...)
так, что его выход переходит в„файл“(на самом деле, файловый дескриптор в /dev/fd
, как правило), и название дано к команде (grep
) в качестве обычного аргумента имени файла.
Если вы не используете bash
, вы можете, вероятно, использовать это вместо того, чтобы (и это будет нормально работать с bash
тоже, и может быть даже предпочтительнее):
zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 |
grep -F -f - FileB
Одинокий тире означает «читать стандарт ввод "в этом контексте; это общее соглашение для команд. Он отлично работает на Mac OS X 10.7.4; есть большая вероятность, что он будет работать и в других местах.
Можете ли вы дать несколько строк из файла A и файла B и конкретно указать, какой ввод вы хотите дать в оболочке? Как выглядят ваши сценарии? – sarnold
Насколько велика FileA? Сколько строк, то есть?Если это всего лишь несколько (скажем, меньше тысячи), тогда доступен один набор опций; если он большой, параметры меньше. Кроме того, RID - это просто одно поле из многих в каждой строке FileA, или это единственные данные в каждой строке? –
Фактически размер файла A больше тысячи. Что касается RID-вывода файла 1, то, например, 09877326369900 92828282828 020292929202. Это три выхода из файла A. Теперь мне нужно получить соответствующие строки файла B, который имеет выход файла A ... для этого мне нужно прочитать вывод файла A из самой консоли и не хранить его в временный файл – User