我有两个文件。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