Мое отчаянное решение этого было манипулировать моим файлом2 в этом, используя некоторые базовые операции awk
A 1 gene_starts
A 5 gene_ends
A 6 gene_starts
A 20 gene_ends
B 1 gene_starts
B 10 gene_ends
B 30 gene_starts
B 60 gene_ends
C 10 gene_starts
C 20 gene_ends
E 1 gene_starts
E 6 gene_ends
Так, чтобы я мог отсортировать два файла 1 и 2 и захватить строки между gene_starts и genes_ends
sort -V -k1,2 file1 file2 | awk '/gene_starts/,/gene_ends/' | awk '!length($3)'
Но это позволило мне получить только
A 20
B 33
C 20
, потому что сортировка помещает строки из file1, соответствующие gene_starts, перед ними.Итак, чтобы получить A 1 и C 10, мне пришлось сделать фильтр gene_ends из моего file2 и использовать
awk 'NR==FNR{c[$1,$2];next} (($1,$2) in c)' file2 file1
, чтобы получить строки gene_starts, которые также были в file1, и добавить их к моему выводу