我有两个文件。第一个文件看起来像这样(但有数千行长:
Chr10:2-20 0 0 0 0
Chr1:390-32032 1 2 0 0
Chr3:32-3020 0 0 1029 20
Chr4:30239-40000 10 15 10 20
Chr10:2-20 9 9 1 8
Chr7:0-80 1 0 3 9
Chr8:0-30 8 6 3 3
Run Code Online (Sandbox Code Playgroud)
第二个文件看起来像这样(但也有数千行长)
Chr1:390-32032
Chr4:30239-40000
Chr3:32-3020
....
Chr4:30239-40000
Run Code Online (Sandbox Code Playgroud)
我想生成第三个文件,从第一个文件中提取数据,仅当 Chr 记录在第二个文件中时。所以第三个文件看起来像这样:
Chr1:390-32032 1 2 0 0
Chr4:30239-40000 10 15 10 20
Chr3:32-3020 0 0 1029 20
Chr4:30239-40000 10 15 10 20
Run Code Online (Sandbox Code Playgroud)
我对代码的想法是使用 AWK 和 fnr==nr 函数。可能将第一列放入数组中?我似乎无法让事情正常工作。任何帮助,将不胜感激。
下面 awk 构造应该能够做你正在寻找的东西。
awk 'NR==FNR{a[$1][$0];next} $0 in a {for (i in a[$0]) print i}' file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)
在哪里 :
a[$1]:在文件 1 传递期间,创建一个二维数组,a其中包含文件 1 的第一列 ($1) 和整行 ($0)。
$0 in a : 在文件 2 传递期间,检查文件 2 的整行 ($0) 是否存在于数组的第一个索引中 a
{for (i in a[$0]) print i}: 如果存在,扫描子数组并打印值。该值将是第一个文件的 $0。