如果文件之间的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
我对此很陌生,感谢您的帮助。
答案 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