我有两个制表符分隔的.txt文件
file1有2000万行和以下结构
col1 col2 col3 col4 col5
1 x x A x
2 y y A x
3 z z A x
4 x x B x
5 x y B x
6 x y E x
7 x z F x
file2有3000行和以下结构
col1
A
B
C
D
现在我想从file1中提取file1中的col1和file1的col4之间匹配的行
所以新文件3应该是这样的
col1 col2 col3 col4 col5
1 x x A x
2 y y A x
3 z z A x
4 x x B x
5 x y B x
如何使用perl或bash执行此操作?
答案 0 :(得分:0)
您可以使用标准awk命令加入2个文件:
awk 'BEGIN{FS=OFS="\t"} FNR == NR { a[$1]; next } $4 in a' file2 file1
答案 1 :(得分:0)
试试这个 -
awk -F'[ ]+' 'NR==FNR {a[$1]++;next} $4 in a{print $0}' f2 f1
1 x x A x
2 y y A x
3 z z A x
4 x x B x
5 x y B x
答案 2 :(得分:0)
既然你也问过Perl,这里有一个可重用的perl解决方案。首先读取文件2,生成一个查找值数组,然后读取文件1,打印出第4列匹配上面创建的数组内部值的任何行。这样的事情可能有用:
return
您可以将其作为#!/usr/bin/perl
use strict;
use warnings;
use autodie;
my $key_file = shift;
open(my $fh, "<", $key_file);
my $header = <$fh>; # read the header line into '$h'
my %keys = map{ chomp; $_ => 1 }<$fh>;
close $fh;
my $query_file = shift;
open(my $q_fh, "<", $query_file);
print scalar <$q_fh>;
while (<$q_fh>) {
my @fields = split;
print if $keys{$fields[3]};
}
close $q_fh;
运行。