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 的第二列,但保持所有其他信息不变,以便输出变为:
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
我是新手,感谢任何帮助。
解决方案
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
推荐阅读
- flutter - 如何使用 ChangeNotifier & Provide 或 BLOC 将整数值从一个地方获取到另一个地方?
- c# - 逐页获取谷歌联系人c#
- javascript - HTTP Post 请求已取消
- react-native - 尝试在未附加到活动时使用权限 API
- javascript - 将 GTranslate WordPress 插件设置为永不过期
- javascript - Javascript:减少属性对象数组中的对象数组
- plsqldeveloper - 在某些 oracle 表中显示波斯字符串的问题
- javascript - 更改 Web 语音 Api 的设备输入:
- pandas - 在注释中显示小数点
- api - 百度云推送 API 认证失败错误