Awk/Grep - 从行中提取值并在其与文件数据匹配时进行替换

Awk/Grep - 从行中提取值并在其与文件数据匹配时进行替换

我有一个包含长行的文件和一个包含参考数据的文件。弗隆,弗雷夫

我的目标是搜索特定字段弗隆rows 将它们与来自的所有值进行比较弗雷夫如果它们匹配,则将它们替换为给定值。

基本上搜索文件弗隆- 第 1 行 - 第 4 场反对弗雷夫- 所有行 - 字段 1。
如果匹配,请检查字段 6 与字段 2,如果匹配,则将字段 4 替换为字段 3。如果 1 或 2 不匹配,则忽略它,不进行任何更改。

弗隆包含如下数据:

Name|location|111|22|333|4444| |6666||8
Name|location| |56|67|| |6666||8

有些字段为空,有些字段有空格,但所有字段均以“|”分隔

弗雷夫包含如下数据:

574|5327|1000
22|4444|2000
67|77|3000

返回:

Name|location|111|2000|333|4444| |6666||8
Name|location| |56|67|| |6666||8

我知道这可以通过函数实现,但我对人们可以在 Awk 中工作的复杂性感到震惊,所以我一直在尝试使用它,但任何字符串搜索/编辑器都可以使用。

答案1

根据您的陈述RETURN,您似乎想要做的是构造一个以 的字段 1 和 2 为键的哈希(关联数组)Fref,然后使用 的字段 4 和 6Flong作为查找键:

$ awk -F'|' '
    BEGIN{OFS = FS} 
    NR == FNR {a[$1 FS $2] = $3; next} 
    $4 FS $6 in a {$4 = a[$4 FS $6]} 
    1
' Fref Flong
Name|location|111|2000|333|4444| |6666||8
Name|location| |56|67|| |6666||8

相关内容