日期:2014-05-16  浏览次数:20572 次

linux 两个文本分别存有数据 根据第一个文本读第二个
我有个两个文本 第一个文本是sample.txt
里面每行有一个数字 有两万行 譬如:
12
13
16
58
。。
另一个文本叫data.txt 里面有几千万行的 每行两个数据 可能是
12 120398
12 as098dk1
13 2498109
14 soiu1298312
14 asd09812
15 123980kasd
16 102938kashd
57 asoiud
58 hai9823
59 hi:12309
data里面的第一列相当于一个id值 包含了sample中所有的数字

我想找出data中所有含有sample对应的数据 输出成一个比如叫result.txt
12 120398
12 as098dk1
13 2498109
16 102938kashd
58 hai9823

求教大神们怎么做啊!

------解决方案--------------------
不知道 perl 的会不会快一点:

Perl code
#!/usr/bin/perl

use strict;
use warnings;

my %samples;

open my $fh, '<', 'sample.txt' or die $!;
while (<$fh>) {
    chomp;
    $samples{$_} = 1;
}
close $fh or die $!;

open my $res, '>', 'result.txt' or die $!;
open $fh, '<', 'data.txt' or die $!;
while (<$fh>) {
    if (/^(\d+)/) {
        do {print $res $_;} if $samples{$1};
    }
}
close $fh or die $!;
close $res or die $!;

------解决方案--------------------
awk 'NR==FNR{a[$1]=$0;next}{if($1 in a)print $1FS$2}' sample.txt data.txt