#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 мы призываем пользователей добавлять свои усилия в виде кода в свой вопрос, поэтому, пожалуйста, добавьте то же самое в свой вопрос и дайте нам знать, приветствия.
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 .