根据另一个文件的另一个匹配 ID 替换文件第二列中的 vlaues

根据另一个文件的另一个匹配 ID 替换文件第二列中的 vlaues

我有两个这样的文件,file2用制表符分隔:

文件1

A 
B
E

文件2

ID value
A   1
B   2
C   3
D   4
E   5
F   6
GA  7
HB  10
I   11

如果 id 存在于 file1 中,我想用 0 替换第二列的值,如下所示

ID  value
A   0
B   0
C   3
D   4
E   0
F   6
GA  7
HB  10
I   11

我写了一段非常愚蠢的代码

for i in `cat file1`;do sed -i 's/\<'"$i"'\>/'"$i"'\t0/g' file2;done

less -S file2 | awk '{print $1,"\t",$2}' | sed 's/ //g' > finalfile

任何流畅的代码都可以像 awk 那样被替换?欣赏它。

答案1

与 一起完成所有工作awk

awk -v OFS='\t' '
  NR==FNR{ Ids[$1]; next }
         { print $1, ($1 in Ids?0:$2) }
' file1 file2

相关内容