gpt4 book ai didi

arrays - 如何使用 awk 打印具有多个关联数组和条件的行

转载 作者:行者123 更新时间:2023-12-01 15:34:07 25 4
gpt4 key购买 nike

我想打印文件 1 中的所有行,其中 $1 和 $4 的值在文件 2 的 $1 和 $4 中找到并且文件 1 $2 中的值大于或等于文件 2 $2 中的值并且其中文件 1 $3 中的值小于或等于文件 2 $3 中的值。

file 1

1   110201809   117658766   a
1 168095261 182305990 b
1 215456074 233436403 c
2 9465687 12905490 d
2 28765309 35235120 e
2 48958595 64702082 f

file 2

 1  245371026   249210707   a
2 937388 46504962 h
2 937388 162731186 b
2 2954974 6777829 c
2 9465687 12996275 d
2 14539477 44757554 d
2 14766820 30080818 m
2 16531332 23584565 n
2 17340076 26206255 o
2 18535880 24452180 p
2 28830071 35289330 q
2 36206662 47273732 r
2 48958495 64703082 f

Desired output 只打印文件 1 中满足条件的行。

desired output

 2  9465687     12905490    d
2 48958595 64702082 f

我尝试了以下给出一个空文件的方法:

awk 'NR==FNR{ a[$1,$4]= $0; b[$2] = $2 ; c[$3] = $3; next }  ($1 $4 in a) && ($2 >= b[$2]) && ($3 <= c[$3])' file2 file1>desired output

最佳答案

我会通过在单独的哈希中收集第二列和第三列来做到这一点,例如:

parse.awk

NR==FNR { 
g[$1,$4] = $2
h[$1,$4] = $3
next
}

($1 SUBSEP $4 in g) && g[$1,$4] >= $2 && h[$1,$4] <= $3

像这样运行它:

awk -f parse.awk file1 file2

输出:

2  9465687     12996275    d
2 48958495 64703082 f

关于arrays - 如何使用 awk 打印具有多个关联数组和条件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49701483/

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