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



我有两个文件:

file1

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

file2

F02508215481124974649572984 28

我一直在努力完成却无济于事的是:

  • 打印file1中的所有行和…

  • 如果file2的第一列与file1的第一列匹配,然后替换file1的第二个字段第二个字段file2.

期望结果

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[$1] = $2 ; next } { $3 = a[$1] ; print } ' file2 file1
F729981596975938577090932834 18
F446395652970789701163827646 10
F446395652970789701163827646 10
F02508215481124974649572984 18 28
F02508215481124974649572984 18 28

任何帮助都将是非常感激的。

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

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

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

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

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

或稍短的

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

相关内容

  • 没有找到相关文章

最新更新