我有一个包含长行的文件和一个包含参考数据的文件。弗隆,弗雷夫。
我的目标是搜索特定字段弗隆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