Сравните 2 файла и отобразите совпадающие записи

Con gnu sed sin control de la validez de la línea

sed -E 's/.*\.(\S+)\s+.*\.(\S+);.*/IP range is: \1-\2/'
-1
21.06.2019, 03:41
4 ответа

Вы можете отсортировать (1 )их, переформатировать, чтобы использовать тот же разделитель (, например. sed (1 ))и обработайте результат с помощью программы, которая выполняет пользовательское сопоставление (Я бы написал это на perl (1 ), но есть много вариантов, возможно, Python больше знаком сегодня ).

0
28.01.2020, 05:09

команда

u=`awk 'NR==1{print $0}' fil1`

awk -v u="$u"  'BEGIN {print u}NR==FNR{a[$3];next}($4 in a){print $0}' fil2 fil1

выход

Col1    Col2    Col3    Col4    Col5
b       2       TT      RR      EE
c       3       QQ      ZZ      PP
1
28.01.2020, 05:09

Вы не говорите, ЧТО вы хотите сопоставить в файле1 (столбце, всей строке, регулярном выражении, строке, частичной или полной и т. д. )так что это предположение, но, возможно, это то, что вы пытаетесь выполнить (полное -сопоставление строки поля столбца 4 файла 1 с столбцом 3 файла 2):

$ awk 'NR==FNR{a[$3]; next} (FNR==1) || ($4 in a)' FS='[|]' file2 FS='\t' file1
Col1    Col2    Col3    Col4    Col5
b       2       TT      RR      EE
c       3       QQ      ZZ      PP

или, может быть, это (сравнение всех столбцов из файла2 с 3 конкретными столбцами из файла2 в полном -совпадении строки поля в порядке):

$ awk 'NR==FNR{a[$1,$2,$3]; next} (FNR==1) || (($1,$3,$4) in a)' FS='[|]' file2 FS='\t' file1
Col1    Col2    Col3    Col4    Col5
b       2       TT      RR      EE
c       3       QQ      ZZ      PP

но есть и десятки других возможностей.Проблема с приведенным вами примером заключается в том, что существует так много комбинаций совпадений, которые могут давать ожидаемый результат с учетом вашего опубликованного примера ввода.

0
28.01.2020, 05:09

Одним из способов использования Perl может быть:

 $ perl -F'\t' -lane '$"="|";
     $h{$_}++,next if @ARGV;
     print if $h{"@F[0,2,3]"};
 ' File2 File1

Сначала прочитайте файл File2 и заполните хеш-ключ строками file2, содержащими символы вертикальной черты.

Затем прочтите файл file1 и попытайтесь сопоставить его поля 0,2 и 3, разделить на вкладку и соединить вертикальной чертой. За матч получить запись.

0
28.01.2020, 05:09

Теги

Похожие вопросы