2014-10-01 4 views
0

У меня есть два файла с именем file_a и file_b. Я хотел бы извлечь данные из file_b на основе данных file_a.извлечение данных из файла на основе другого файла

file_a

1kps_2 
1tgs 
1kp3_1 

file_b

PDB 1sih AA 
PDB 1kps_2 AB 
PDB 1kp3_1 CD 
PDB 1sjy AA 

Желаемая выход

PDB 1kps_2 AB 
    1tgs not available 
PDB 1kp3_1 CD 

ваша помощь будет очень признателен !!

+1

Вы должны показать, что вы пытались таким образом мы можем помочь вам исправить. – Barmar

ответ

1

попробовать этот AWK Однострочник:

awk 'NR==FNR{b[$2]=$0;next}{print $0 in b? b[$0]: $0 " not available"}' fileb filea 
0
cat file1 | while read aline;do grep $aline file2 || echo $aline not available;done 

... должно делать то, что вы хотите, без awk. Обратите внимание, что это работает в sh (или bash, но в последнее время он немного испугался;)

Если файлы большие, скрипт awk, вероятно, будет/может быть намного более эффективным. Однако, в зависимости от того, отсортированы ли файлы, это может фактически не иметь никакого значения, поскольку вторая часть должна всегда grep весь файл2, чтобы гарантировать, что возможное совпадение не было «выше» текущей позиции в файле2.

Пустая последняя строка в файле1 также будет выдавать «не доступно» на линии сама по себе в конце.

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