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

时间:2019-08-13 14:54:49

标签: awk

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

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

ID1   some   other   information
ABCD
x
123
ID2   some   other   information
EFGH
x
456

文件2包含两列信息:

ID1   abcd
ID2   efgh

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

ID1   some   other   information
abcd
x
123
ID2   some   other   information
efgh
x
456

我正在尝试通过用文件2中的信息创建一个数组来在awk中解决此问题,但是我不知道如何将其应用于文件的下一行,因为我需要这样:

awk 'NR==FNR{a[$1]=$2;next} $1 in a{<NEXT LINE>=a[$1]}1' file2 file1

我对此很陌生,感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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