Сохранить найденные строки в отдельном списке

#join #awk #sed #grep

#Присоединиться #awk #sed #grep

Вопрос:

У меня есть два файла

Файл 1:

 ##HEADER#########################
##HEADER#########################
1       69078   70017           .
1       324295  324394          .
1       324428  325605          .
1       327735  328214          .
1       367646  368605          .
1       621093  622042          .
1       664485  665108          .
1       721405  721918          .
1       762080  762571          .
1       861308  861407          .
1       865533  865718          .
1       866395  866494          .
  

и файл 2:

 1       69078   70017  
1       324295  324394
1       762080  762571
1       861308  861407
1       865533  865718
  

Я хотел бы сохранить строки в файле 1, которые соответствуют столбцам 2 и 3 в файле 2. Результатом является этот вывод (включая сохранение заголовка в файле 1):

 ##HEADER#########################
##HEADER#########################
1       69078   70017           .
1       324295  324394          .
1       762080  762571          .
1       861308  861407          .
1       865533  865718          .
  

Большое спасибо!

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

 join --header -1 2 -2 2 file1 file2 > output
  

Но он не распознает несколько строк заголовка и создает несколько столбцов, а не только те, которые показаны.

Комментарии:

1. На SO мы призываем пользователей добавлять свои усилия в виде кода в свой вопрос, поэтому, пожалуйста, добавьте то же самое в свой вопрос и дайте нам знать, приветствия.

2. man присоединиться

3. Извиняюсь @RavinderSingh13 и благодарю тебя, Камил, я обновил попытку использования join. Но я также пробовал: «sed -E -i.bak ‘s/[:blank:]] $ /<files.txt «

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

Ответ №1:

Вы можете использовать этот awk:

  awk '{key = $2 OFS $3} NR == FNR{seen[key]; next} FNR <= 2 || key in seen' file2 file1
  
 ##HEADER#########################
##HEADER#########################
1       69078   70017           .
1       324295  324394          .
1       762080  762571          .
1       861308  861407          .
1       865533  865718          .