我有两个看起来像这样的文件:
文件1:
ID1 0 1
ID3 1 1
ID4 0 0
file2的:
ID1 ID2 ID3 ID4 ID5
a a b b a
x y x y y
我想只保留file2中的列,其ID也可以在file1中找到。
期望的输出:
ID1 ID3 ID4
a b b
x x y
我对awk,Perl或类似的任何提示或建议感到满意。
答案 0 :(得分:1)
您可以从命令行使用perl,
perl -lane'
BEGIN{ local @ARGV = pop; @h{ map /(\w+)/, <> } =() }
@r = grep exists $h{$F[$_]}, 0 .. $#F if !@r;
print join "\t", @F[@r];
' file2 file1
输出
ID1 ID3 ID4
a b b
x x y
答案 1 :(得分:1)
如果您对awk
感到满意,可以这样做:
awk 'FNR==NR {ok[$1]++;next}
FNR==1 {for(f=1;f<NF;f++)if(ok[$f])p[f]++}
{for(x=1;x<NF;x++)if(p[x]){{if(length(out)>0)out=out ","}out=out $x;}print out;out=""}' file1 file2
FNR=NR
部分仅适用于读取file1,并记录所需的ID。FNR==1
仅适用于file2的第一行,它会检查是否需要每个字段,并存储一个数组p[]
,说明哪些字段是可打印的。