读书人

linux 两个文己任别存有数据 根据第一

发布时间: 2012-06-23 14:52:43 作者: rapoo

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/perluse 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

读书人网 >UNIXLINUX

热点推荐