根据匹配的 ID 变量替换值

根据匹配的 ID 变量替换值

我有两个文件。file1有 6 列,file2有 2 列。我想根据匹配的 ID 变量(两个文件中的第 1 列)将 的第 6 列中的值替换file1为 的第 2 列中的值。file2

注意:file2包含的主题比file1.因此不幸的是下面的命令不起作用:

awk 'NR==FNR{tmp[$1]=$2;next}{print $0,tmp[$1]}' file2 file1

file1好像:

HG00096 HG00096 0 0 0 -9
HG00097 HG00097 0 0 0 -9
HG00099 HG00099 0 0 0 -9
HG00100 HG00100 0 0 0 -9
HG00102 HG00102 0 0 0 -9

file2好像:

HG00096 2
HG00097 5
HG00098 5
HG00099 3
HG00100 3
HG00101 5
HG00102 3

我希望生成的文件如下所示:

HG00096 HG00096 0 0 0 2
HG00097 HG00097 0 0 0 5
HG00099 HG00099 0 0 0 3
HG00101 HG00100 0 0 0 5
HG00102 HG00102 0 0 0 3

答案1

使用join

join -j 1 -o 0,1.2,1.3,1.4,1.5,2.2 file1 file2

在哪里:

  • -j定义两个文件的连接字段
  • -o根据需要格式化输出

答案2

你几乎成功了。

awk 'NR==FNR{tmp[$1]=$2;next};{$6=tmp[$1] ; print }' file2.txt file1.txt

在哪里:

  • $6 = tmp[$1]将取代第 6 字段。

答案3

我无法发表评论(没有特权) - 但想问一个额外的问题。我想做与第一个人要求的完全相同的事情。另外,我希望文件 2 中与文件 1 中不匹配的剩余行为“-9”。非常感谢。很高兴发布一个单独的问题,但不想创建更多不必要的帖子。


文件1

HG00096 HG00096 0 0 0 -9
HG00097 HG00097 0 0 0 -9
HG00098 HG00098 0 0 0 -9
HG00099 HG00099 0 0 0 -9
HG00100 HG00100 0 0 0 -9
HG00101 HG00101 0 0 0 -9
HG00102 HG00102 0 0 0 -9

文件2


HG00096 2
HG00097 5
HG00099 3
HG00101 5
HG00102 3

文件3


HG00096 HG00096 0 0 0 2
HG00097 HG00097 0 0 0 5
HG00100 HG00100 0 0 0 -9
HG00099 HG00099 0 0 0 3
HG00100 HG00100 0 0 0 -9
HG00101 HG00100 0 0 0 5
HG00102 HG00102 0 0 0 3

相关内容