比较两列不同的文件并使用 AWK 替换另一列

Compare two columns of different files and replace another using AWK

我有这两个文件:

file1

F729981596975938577090932834 18 A1472861
F446395652970789701163827646 10 B35234576
F446395652970789701163827646 10 C96515097
F02508215481124974649572984 18 D83395117
F02508215481124974649572984 18 E26810286

file2

F02508215481124974649572984 28

我一直试图完成但无济于事的是:

期望的结果

F729981596975938577090932834 18 A1472861
F446395652970789701163827646 10 B35234576
F446395652970789701163827646 10 C96515097
F02508215481124974649572984 28 D83395117   <- Second field successfully replaced.
F02508215481124974649572984 28 E26810286   <- Second field successfully replaced.

我得到的最接近的是:

awk ' NR == FNR { a[] =  ; next } {  = a[] ; print } ' file2 file1

F729981596975938577090932834 18
F446395652970789701163827646 10
F446395652970789701163827646 10
F02508215481124974649572984 18 28
F02508215481124974649572984 18 28

如有任何帮助,我们将不胜感激。

目前您正在使用第三个字段,并且您没有检查数组是否包含该值。

如果设置为第二个字段,不检查数组,前3行在数组中找不到值,当前$2列值为空。

您可以检查第一个字段是否在数组中。如果是,请将第二个字段设置为该值。

awk ' NR == FNR { a[] =  ; next } { if ( in a) { = a[]}; print } ' file2 file1

输出

F729981596975938577090932834 18 A1472861
F446395652970789701163827646 10 B35234576
F446395652970789701163827646 10 C96515097
F02508215481124974649572984 28 D83395117
F02508215481124974649572984 28 E26810286

或稍短

awk ' NR == FNR { a[] =  ; next } { if( in a)  = a[]} 1' file2 file1