我想要打印出文件1中所有满足以下条件的行:$1和$4的值在文件2的$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
$1 SUBSEP $4
是这三个元素的连接,与哈希寻址中使用的键相同,例如g[$1,$4]
。in g
测试该特定键是否在g
哈希中。 - Thor