我有两个文件。第一个文件如下所示(但长数千行:
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
第二个文件看起来像这样(但也有数千行)
Chr1:390-32032
Chr4:30239-40000
Chr3:32-3020
....
Chr4:30239-40000
我想生成第三个文件,仅当该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
我对代码的想法是使用AWK和fnr == nr函数。可能将第一列放入数组吗?我似乎无法正常工作。任何帮助将不胜感激。
答案 0 :(得分:1)
以下awk构造应该可以完成您想要的工作。
awk 'NR==FNR{a[$1][$0];next} $0 in a {for (i in a[$0]) print i}' file1.txt file2.txt
位置:
a[$1]
:在file1传递期间,创建一个二维数组a
,其中包含file1的第一列($ 1)和整行($ 0)。
$0 in a
:在file2传递期间,检查file2的整行($ 0)是否在数组a
的第一个索引中
{for (i in a[$0]) print i}
:如果存在,则扫描子数组并打印值。该值将是第一个文件的$ 0。