Linux 如果文件1中的A列等于文件2中的B列,则打印行
我有两个文件,文件1看起来像:Linux 如果文件1中的A列等于文件2中的B列,则打印行,linux,awk,Linux,Awk,我有两个文件,文件1看起来像: rs12126768 T 0.0252778071842686 rs908742 A -0.0175531592475892 rs3107147 A 0.0253753063312283 rs3128309 A 0.0284902703996274 rs16824948 T 0.0696193418800571 rs2643888 A 0.0452601314048646 rs3795272 T -0.0244
rs12126768 T 0.0252778071842686
rs908742 A -0.0175531592475892
rs3107147 A 0.0253753063312283
rs3128309 A 0.0284902703996274
rs16824948 T 0.0696193418800571
rs2643888 A 0.0452601314048646
rs3795272 T -0.0244976316004002
rs2840531 T -0.0438473997802763
rs10910060 A 0.0364283566135514
rs1129332 T -0.0274739770007551
1 rs908742 0 2033256
1 rs3795272 0 2284195
1 rs2840531 0 2286408
1 rs1129332 0 2336210
1 rs7512269 0 2418625
1 rs2247308 0 2445406
1 rs1980789 0 2455863
1 rs3122922 0 2456203
1 rs4648453 0 3025712
1 rs6424069 0 3147030
文件2看起来像:
rs12126768 T 0.0252778071842686
rs908742 A -0.0175531592475892
rs3107147 A 0.0253753063312283
rs3128309 A 0.0284902703996274
rs16824948 T 0.0696193418800571
rs2643888 A 0.0452601314048646
rs3795272 T -0.0244976316004002
rs2840531 T -0.0438473997802763
rs10910060 A 0.0364283566135514
rs1129332 T -0.0274739770007551
1 rs908742 0 2033256
1 rs3795272 0 2284195
1 rs2840531 0 2286408
1 rs1129332 0 2336210
1 rs7512269 0 2418625
1 rs2247308 0 2445406
1 rs1980789 0 2455863
1 rs3122922 0 2456203
1 rs4648453 0 3025712
1 rs6424069 0 3147030
如果文件1中的$1出现在文件2的$2中,我希望它打印该行。因此,期望的输出是:
rs908742 A -0.0175531592475892
rs3795272 T -0.0244976316004002
rs2840531 T -0.0438473997802763
rs1129332 T -0.0274739770007551
提前感谢您的帮助。试试这一行:
awk 'NR==FNR{a[$2];next}$1 in a' file2 file1
我建议这样做的算法是简单的散列。通读file2,记住file2中$2的所有内容。然后,通读file1,如果file1中的$1在内存中,则打印该行 下面是一个实现此功能的perl脚本:
use strict;
open FILE2, "file2.txt";
my %remember;
while(<FILE2>) {
chomp $_;
my @fields = split;
$remember{$fields[1]} = 1;
}
open FILE1, "file1.txt";
while(<FILE1>) {
chomp $_;
my @fields = split;
if(defined $remember{$fields[0]}) {
print "$_\n";
}
}
使用严格;
打开文件2,“FILE2.txt”;
我的%记得;
while(){
大口大口;
我的@fields=split;
$memory{$fields[1]}=1;
}
打开FILE1,“FILE1.txt”;
while(){
大口大口;
我的@fields=split;
if(定义为$memore{$fields[0]}){
打印“$\u\n”;
}
}
太棒了,这就成功了!现在把它写在实验书上了,谢谢!