我想打印文件1中的所有行,其中在文件2的$ 1和$ 4中找到了$ 1和$ 4的值,并且文件1 $ 2中的值大于或等于文件2 $ 2中的值,并且其中的值文件1 $ 3小于或等于文件2 $ 3中的值。
文件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
文件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
所需的输出仅打印文件1中符合条件的行。
期望的输出
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/