我有两个文件,一个文件中有整数,另一个文件有范围。有整数的那个:
integer.txt -->
A 68 V K 99187
A 98 J K 99107
A 78 V K 99188
1 89 V C 88373
2 99 C F 88999
3 100 C H 88744
X 101 E J 88779
ranges.txt -->
A 28 78 YELLOW
1 33 89 BLUE
2 46 111 PURPLE
X 77 199 BLACK
X 101 299 GREEN
X 102 397 RED
我想有是,如果first column
中integer.txt
和range.txt
是一样的,让这适合在之间的整数column 2nd
和3rd
(range
的`ranges.txt。),即使它是在边界重叠(=小,等于和大和等于 )。
我尝试过的是:
awk '
NR == FNR {intt[$1]=$2; max[$1]=$3; next}
{
for (color in intt)
if (intt[color] < $2 && intt[color] == $2 && $2 < max[color] && $2 == max[color] ) {
print $0, color
break
}
}
'
我期望的是:
A 28 78 YELLOW A 68 V K 99187
A 28 78 YELLOW A 78 V K 99188
1 33 89 BLUE 1 89 V C 88373
2 46 111 PURPLE 2 99 C F 88999
X 77 199 BLACK X 101 E J 88779
X 101 299 GREEN X 101 E J 88779
在预期的输出中,我不希望看到X 102 397 RED
任何以开头的行都X
不会介于102 and 397
..
我知道我的代码现在处于可怕的状态,但我该如何修复它?
使用用于多维数组的 GNU awk:
$ cat tst.awk
{ key = $1 }
NR==FNR {
color = $4
beg[key][color] = $2
end[key][color] = $3
all[key][color] = $0
next
}
key in all {
for (color in all[key]) {
if ( ($2 >= beg[key][color]) && ($2 <= end[key][color]) ) {
print all[key][color], $0
}
}
}
$ gawk -f tst.awk ranges.txt integer.txt
A 28 78 YELLOW A 68 V K 99187
A 28 78 YELLOW A 78 V K 99188
1 33 89 BLUE 1 89 V C 88373
2 46 111 PURPLE 2 99 C F 88999
X 101 299 GREEN X 101 E J 88779
X 77 199 BLACK X 101 E J 88779
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句