Awk 如果文件之间的第一个字段匹配,则将下一行替换为其他文件中的第二个字段

Awk 如果文件之间的第一个字段匹配,则将下一行替换为其他文件中的第二个字段,awk,Awk,如果文件之间的ID匹配,我试图用另一个文件中的字符串替换文件中的行 文件1包含四行一组的信息。ID为的行有几列,其他行仅包含一列: ID1 some other information ABCD x 123 ID2 some other information EFGH x 456 文件2包含两列信息: ID1 abcd ID2 efgh 如果文件之间的ID匹配,我想将文件1的ID行之后的下一行替换为文件2的第二列,但保留所有其他信息不变,以便输出变为: ID

如果文件之间的ID匹配,我试图用另一个文件中的字符串替换文件中的行

文件1包含四行一组的信息。ID为的行有几列,其他行仅包含一列:

ID1   some   other   information
ABCD
x
123
ID2   some   other   information
EFGH
x
456
文件2包含两列信息:

ID1   abcd
ID2   efgh
如果文件之间的ID匹配,我想将文件1的ID行之后的下一行替换为文件2的第二列,但保留所有其他信息不变,以便输出变为:

ID1   some   other   information
abcd
x
123
ID2   some   other   information
efgh
x
456
我试图在awk中通过使用文件2中的信息创建一个数组来解决这个问题,但我不知道如何将其应用到文件中的下一行,因为我需要它:

awk 'NR==FNR{a[$1]=$2;next} $1 in a{<NEXT LINE>=a[$1]}1' file2 file1
awk'NR==FNR{a[$1]=$2;a{=a[$1]}1'文件中的下一个}$1文件2文件1
我是新手,非常感谢你的帮助

awk 'FNR == NR{arr[$1]=$2;next} cur_val != ""{$1=cur_val; cur_val=""} arr[$1] != "" {cur_val=arr[$1]}{print}' file2 file1
好吧,让它更清楚一点

#! /bin/bash

awk '{
    if (FNR == NR) {
        arr[$1]=$2
        next
    } 
    else
    if (cur_val != "") {
        $1=cur_val
        cur_val=""
    } 
    else
    if (arr[$1] != "") {
        cur_val=arr[$1]
    }
    print
}' file2 file1
好吧,让它更清楚一点

#! /bin/bash

awk '{
    if (FNR == NR) {
        arr[$1]=$2
        next
    } 
    else
    if (cur_val != "") {
        $1=cur_val
        cur_val=""
    } 
    else
    if (arr[$1] != "") {
        cur_val=arr[$1]
    }
    print
}' file2 file1