比较两列不同的文件并使用 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
我一直试图完成但无济于事的是:
打印 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[] = ; 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
我有这两个文件:
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[] = ; 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