2015-09-08 1 views
-2

я значения в файле А какПоиск список строк

301310 
304790 
500011 
600462 
607348 
614269 

Я хочу, чтобы найти все эти значения в текстовом файле B, который имеет такие строки

1.35|10|5|11|1p36.31|GPR153|P|G protein-coupled receptor 153||614269|REc|||| | |4(Gpr153)| 
1.36|3|24|06|1p36.31|HES2|P|Hairy/enhancer of split, Drosophila, homolog of, 2||609970|REc|||| | || 
1.37|3|24|06|1p36.31|HES3|P|Hairy/enhancer of split, Drosophila, homolog of, 3||609971|REc|||| | || 
1.38|3|24|06|1p36.33|HES4|P|Hairy/enhancer of split, Drosophila, homolog of, 4||608060|REc|||| | || 
1.39|3|24|06|1p36.32|HES5|P|Hairy/enhancer of split, Drosophila, homolog of, 5||607348|REc|||| | || 

Я хочу напечатать все строки, которые содержат какой-либо термин из файла A и печатают их в выходном файле.

Я попытался следующие команды, но он не работает

grep -w -F -f fileA fileB >file C 
+0

Ваш пример работает нормально для меня. (Как только я поместил одно из значений из файлаA в fileB, то есть.) –

+0

grep -w -F -f файлA fileB> файл C –

+0

Примечание: я отредактировал ваш вопрос для выделения - если ваш файлA фактически имеет эти пустые строки между каждый номер, вы хотите удалить их, иначе вы получите соответствие в каждой строке файла. –

ответ

0

Когда вы вывесили свой вопрос, вы все-таки FiLea так:

301310 

304790 

500011 

Я редактировал сообщение для форматирования и удалили пустые строки, считая, что это была только опечатка с вашей стороны. Если у вашего входного файла на самом деле есть, в нем есть пустые строки, вы хотите удалить их, так как grep будет интерпретировать их как «соответствовать пустующему шаблону», который соответствует каждой строке. Он будет приравниваться к:

grep "" fileB 

Итак, просто протрите пустые строки из файлаA, и ваша опубликованная команда grep должна работать нормально.

+0

Да, я удалил пустые строки, и это сработало. Огромное спасибо. –

0

Если вы Grep не работает, то, может быть, perlish решение? Хотя я укажу - с учетом ваших примеров данных совпадений не найдено, что может быть частью проблемы.

#!/usr/bin/perl 

use strict; 
use warnings; 
open (my $file1, '<', "FileA") or die $!; 

my @search_for = <$file1>; 
close ($file1); 

my $search_regex = join ("|", map {quotemeta} @search_for); 
    $search_regex = qr/$search_regex/; 

open (my $file2, '<', "fileB") or die $!; 
while (<$file2>) { 
    print if m/$search_regex/; 
} 
close ($file2); 

Если вы хотите, чтобы у вас нет пустых строк:

my $search_regex = join ("|", grep { m/^\w+$/ } map {quotemeta} @search_for); 
    $search_regex = qr/$search_regex/; 
+0

Благодарим вас за ответ. Я редактировал свои примеры ввода и поэтому у них есть соответствующие условия.Но проблема в том, что все строки из файла B печатаются как выходные, а не только те, которые имеют соответствующие строки с файлом A –

+0

Это сработало. На самом деле в fileA была пустая строка, поэтому она печатала все. Большое спасибо за помощь. –

0

Следующая команда работала

Grep -w -F -f FiLea FILEB> fileC

Изначально это не сработало, потому что была пустая строка в FiLea, поэтому она печатает все от FILEB. Теперь я удалил пустую строку из файлаA и получил мои обязательные строки.

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