我有两个表数组,这里是文件A:
k1 A 1
k1 A 2
k1 B 1
k1 B 2
k1 B 3
k1 B 4
k1 B 5
k1 B 6
k1 B 7
k1 B 8
k1 B 9
k1 V 1
k1 V 2
k1 V 3
k1 V 4
k1 V 5
k1 V 6
k1 S 1
k1 S 2
和第一个数组的子集(比如文件B):
k1 A 2
k1 B 5
k1 V 2
k1 S 1
我想从文件A中选择性地保留文件B中的行,并根据第3列中的值提取附近的行+/- 3。
我的预期输出是:
k1 A 1
k1 A 2
k1 B 2
k1 B 3
k1 B 4
k1 B 5
k1 B 6
k1 B 7
k1 B 8
k1 V 1
k1 V 2
k1 V 3
k1 V 4
k1 V 5
k1 S 1
k1 S 2
有关如何实现的任何建议?非常感谢!
这个awk one-liner完成了这项工作:
awk '{k=$1 FS $2}
NR==FNR{a[k]=$3;next}a[k]>=$3-3 && a[k]<=$3+3' B A
对于给定的输入示例(A和B),它将为您提供预期的输出。
逻辑也很简单,如果你知道awk语法,你应该理解它。代码解释了自己。
附:你也用grep
标记了这个问题,但是grep不是正确的工具。