2012-06-20 2 views
0

Это сценарий, я написалИспользование Xargs читать входные данные из консоли

zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 | xargs 

Перед точкой xargs используется мое о/р

01982893213982312 - RID 1 
3213213213213 - RID 2 
3213213213343 - RID 3 
3213213251261 - RID 4 

Для каждого RID здесь присутствует , в файле Б. есть соответствующая строка. Я планирую сделать, как показано ниже, после:

zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 | xargs| 
{grep RID1 in file B, grep RID2 in file B,grep RID3 in file B, grep RID4 in file B} 

мой единственный вопрос заключается в том, как я буду ссылаться RID1,2,3,4 с xargs ....

+0

Можете ли вы дать несколько строк из файла A и файла B и конкретно указать, какой ввод вы хотите дать в оболочке? Как выглядят ваши сценарии? – sarnold

+0

Насколько велика FileA? Сколько строк, то есть?Если это всего лишь несколько (скажем, меньше тысячи), тогда доступен один набор опций; если он большой, параметры меньше. Кроме того, RID - это просто одно поле из многих в каждой строке FileA, или это единственные данные в каждой строке? –

+0

Фактически размер файла A больше тысячи. Что касается RID-вывода файла 1, то, например, 09877326369900 92828282828 020292929202. Это три выхода из файла A. Теперь мне нужно получить соответствующие строки файла B, который имеет выход файла A ... для этого мне нужно прочитать вывод файла A из самой консоли и не хранить его в временный файл – User

ответ

0

Другой способ сделать это состоит в трубе данные, такие как:

script1 fileA | script2 fileB 

Такой подход позволяет для передачи большего количества аргументов и потока через fileB.

+0

Как второй скрипт получит вход один за другим с первого – User

+0

Это написанный мной сценарий zgrep -i xxxx FileA | grep -o «RID = [0-9 | AZ] *" | uniq | сократить -d "=" -f2 | xargs До точки Xargs используется мое о/р 01982893213982312 - РИД 1 3213213213213 - РИД 2 3213213213343 - РИД 3 3213213251261 - РИД 4 Для каждого Здесь присутствует RID, имеется соответствующая строка в F ile B. Я планирую сделать, как показано ниже, после zgrep -i xxxx FileA | grep -o "RID = [0-9 | AZ] *" | uniq | cut -d "=" -f2 | xargs | {grep RID1 в файле B, grep RID2 в файле B, grep RID3 в файле B, grep RID4 в файле B} Теперь мой единственный вопрос: как я буду ссылаться на RID1,2,3,4 с xargs .... – User

+0

Я отредактировал вопрос .. Plz посмотрим, что для лучшего форматирования – User

0

Если данные в 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; есть большая вероятность, что он будет работать и в других местах.

+0

Его в одном RID в строке ... Но fgrep читает i/p с консоли – User

+0

Это написанный мной сценарий zgrep -i xxxx FileA | grep -o "RID = [0-9 | AZ] *" | uniq | cut -d "=" -f2 | xargs Перед использованием точки Xargs мой o/p равен 01982893213982312 - RID 1 3213213213213 - RID 2 3213213213343 - RID 3 3213213251261 - РИД 4 для каждого RID здесь присутствует, есть соответствующая строка в файле B. Я планирую сделать как ниже после zgrep -i хххх FiLea | Grep -о "RID = [0-9 | AZ] *" | uniq | cut -d "=" -f2 | xargs | {grep RID1 в файле B, grep RID2 в файле B, grep RID3 в файле B, grep RID4 в файле B} Теперь мой единственный вопрос - как я буду ссылаться на RID1,2,3,4 с xargs .. .. – User

+0

Я отредактировал вопрос .. Plz посмотрим, что для лучшего форматирования – User