如何用文件2中的分类号替换文件1中的一列(文本字)

时间:2017-04-10 08:26:40

标签: linux awk character

我有一个这样的问题:

文件1(非常大的文件):

    fid  rsid activity  
    1 rs111 we drink
    2 rs112 we drink 
    3 rs113 we eat 
    4 rs114 we are happy
    5 rs115 we eat
    ...

文件2(活动分类):

we drink  1 
we eat 2
we are happy 3
others 4
...

我想使用活动代码替换(或生成另一列)活动名称,以获得类似

的内容
fid  rsid code activity  
 1 rs111 1 we drink
 2 rs112 1 we drink 
 3 rs113 2 we eat 
 4 rs114 3 we are happy
 5 rs115 2 we eat
 ...

我怎样才能使用unix命令(例如awk)呢?

非常感谢! 埃里克

1 个答案:

答案 0 :(得分:0)

一般来说,人们会使用join来解决这类问题,但加入的“字段”有点复杂。使用awk,您将首先阅读“活动”文件以构建字典,然后阅读“大文件”,随时插入活动代码:

awk 'NR == FNR { val = $NF; $NF=""; sub(/ *$/, "", $0); a[$0] = val; next; }
     { fid = $1; rsid = $2; $1 = ""; $2 = ""; sub(/^ */, "", $0);
       print fid, rsid, a[$0], $0 }' activities bigfile

根据需要插入标题。