gpt4 book ai didi

awk - 数组内的模式匹配

转载 作者:行者123 更新时间:2023-12-04 20:53:48 26 4
gpt4 key购买 nike

我想用文件 B 中的数据更新文件 A 中的行,基于文件 B 中的单个字段与文件 A 中的四个字段中的任何一个之间的模式匹配(尽管匹配将是文件 A 中这些字段中的数组的第一个元素).

fileA 如下所示。 $3 $4 $5 $6 是我在其中搜索匹配项的字段,这些字段可以是“NM”或由“:”分隔的三个元素组成的数组

H01 x001 NM NM NM NM
H01 f005 NM s10|001:60:50 NM s10|001:500:709
H06 x989 NM NM NM s560|999:70:500
H79 r679 s560|999:1000:1100 NM NM NM

fileB 如下所示。

POI05 A s50|088 85.77
POI15 A s10|001 65.09
POI45 B s8970|0753 85.37
POI55 B s900|08 8.77
POI75 C s560|999 55.82
POI81 C s33|0008 5.88

匹配将在 fileB 的 $3 和 $3 的数组的第一个元素之间 || $4 || $5 || fileA 的 $6,输出如下所示。它基本上是带有新字段 $7 的 fileA,当有匹配时来自 fileB 的 $1:$2:$4 或当没有匹配时为“NM”。

H01 x001 NM NM NM NM NM
H01 f005 NM s10|001:60:50 NM s10|001:500:709 POI15:A:65.09
H06 x989 NM NM NM s560|999:70:500 POI75:C:55.82
H79 r679 s560|999:1000:1100 NM NM NM POI75:C:55.82

如上例所示,fileA 中的 fileB $2 可以有多个匹配项。

我一直在努力做的事情:

我昨天获得了有关相关问题的帮助,但它缺乏以下复杂性:(a) 匹配在数组中,以及 (B) 匹配包含在四个字段中的任何一个中。

awk 'NR==FNR{a[$3]=$1":"$2":"$4;next}{$7=(a[$2])?a[$2]:"NM"}1' 

我需要将数组拆分为 $3 $4 $5 $6 的 fileA 并提取每个的第一个元素

split($3, arr, ":") $3[1]

最佳答案

这应该有效:

$ awk '
NR==FNR {
a[$3] = $1":"$2":"$4
next
}
{
n = split($0, tmp, /[: ]/)
for(x=1; x<=n; x++) {
if(a[tmp[x]]) {
print $0 FS a[tmp[x]]
next
}
}
print $0,"NM"
}' fileb filea
H01 x001 NM NM NM NM NM
H01 f005 NM s10|001:60:50 NM s10|001:500:709 POI15:A:65.09
H06 x989 NM NM NM s560|999:70:500 POI75:C:55.82
H79 r679 s560|999:1000:1100 NM NM NM POI75:C:55.82

关于awk - 数组内的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22709708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com