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