найдите и распечатайте определенную информацию с ее именем

У меня есть список файла данных 1, который я хочу найти в файле 2, где я хочу к grep шаблон соответствия с его именем. Не необходимо, чтобы каждое имя состояло из уникальных данных. Это может быть распространено среди имен. 

Файл 1:

123_A7
456_B2
789_f5
111_L2

основной файл:

A   Edwin
B   777
B   123_A7
B   456_B2
A   Alex
B   453
B   678
A   Marwin
B   789
B   123_A7
B   111_L2
B   452

Желаемый вывод:

B   123_A7
A   Edwin
A   Marwin
B   456_B2
A   Edwin
B   111_L2
A   Marwin
-4
задан 21 September 2017 в 07:40

2 ответа

Можно использовать sed:

sed '/\s/{H;d;}
  G;s/\nB/#B/g
  s/^\(.*\)\(\n\n.*#\)\(B\s*\1\)/\3#\2\3/
  /^[^#]*\n/d
  :a;s/^\([^#]*\)\(#.*\n\)\(A[^#]*\)\([^\n]*#\)\1/\1#\3\2/;ta
  s/#\n.*//;y/#/\n/' main file1

Первое чтение main файл для сбора кодов для каждого имени в пространстве хранения (строка 1). Затем для каждой строки file1 добавляют пространство хранения, заменяют новые строки прежде B строки с # для более легкого парсинга (строка 2) и поиск с обратными ссылками для соответствия кодам (строка 3). Удалите строки без соответствий (строка 4). Теперь цикл для сбора названий данного шаблона (строка 5). Наконец печать с остающимся удаленным пространством хранения и # преобразованный назад в новые строки (строка 6). (Отметьте: работы только с GNU sed)

1
ответ дан 2 November 2019 в 05:41

Я использовал бы awk для этого:

awk 'NR==FNR{seen[$1];next} /^A/{NAME=$0}
    {for (x in seen){ if ($2==x)print $0"\n"NAME}}' file1 main

Вывод:

B   123_A7
A   Edwin
B   456_B2
A   Edwin
B   123_A7
A   Marwin
B   111_L2
A   Marwin

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

awk -F'\t' '{a[$1]=a[$1]"\n"$2} END{for (i in a) print i""a[i]}' <(
    awk 'NR==FNR{seen[$1];next} 
        /^A/{NAME=$0}{for (x in seen){ if ($2==x)print $0"\t"NAME}
    }' file1 main)

Вывод:

B   111_L2
A   Marwin
B   456_B2
A   Edwin
B   123_A7
A   Edwin
A   Marwin
0
ответ дан 2 November 2019 в 05:41

Другие вопросы по тегам:

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