linux 两个文己任别存有数据 根据第一个文本读第二个
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 的会不会快一点:
我有个两个文本 第一个文本是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