Unix 匹配两个数字文件以超出范围和在范围内
执行:Unix 匹配两个数字文件以超出范围和在范围内,unix,awk,numbers,range,match,Unix,Awk,Numbers,Range,Match,执行: awk -v FILE1="FILE1.out" -v FILE2="FILE2.out" ' FNR==NR {BLs[++BSize]=$1;BHs[BSize]=$2;next} {Blacked=0 for( i=1; i<BSize && ! Blacked; i++) Blacked = ( $2 >= BLs[i] && $2 <= BHs[i]) if ( Blacked ) print >
awk -v FILE1="FILE1.out" -v FILE2="FILE2.out" '
FNR==NR {BLs[++BSize]=$1;BHs[BSize]=$2;next} {Blacked=0 for( i=1; i<BSize && ! Blacked; i++) Blacked = ( $2 >= BLs[i] && $2 <= BHs[i])
if ( Blacked ) print > FILE2
else print > FILE1
}' BlackList_B_Number.dat 2OCS_VOICECALLS_1111_11_111111
文件2应该有470和600,但不存在,它打印在文件1上
cat FILE2.out
111111111 902123124 201605
111111111 902123123 201605
111111111 902123123 201605
111111111 016 201605240
稍微重写一下,得到了预期的结果
$ awk 'NR==FNR {low[NR]=$1;hi[NR]=$2;n=NR;next}
{for(i=1;i<=n;i++)
if($2>=low[i] && $2<=hi[i])
{print > "inrange"; next}
print > "not_inrange"}' data calls
==> inrange <==
111111111 902123124 201605
111111111 902123123 201605
111111111 902123123 201605
111111111 016 201605240
111111111 470 201605240
111111111 600 201605240
==> not_inrange <==
111111111 902123125 201605
111111111 902123126 201605
111111111 902123126 201605
111111111 1 20160524011
111111111 3 20160524024
111111111 423 201605240
111111111 5 20160524053
111111111 400 424242432
$awk'NR==FNR{low[NR]=1;hi[NR]=2;n=NR;next}
{对于(i=1;i=low[i]&&$2“inrange;next}
打印>“不在范围内”}数据调用
==>在范围内不在范围内
$ awk 'NR==FNR {low[NR]=$1;hi[NR]=$2;n=NR;next}
{for(i=1;i<=n;i++)
if($2>=low[i] && $2<=hi[i])
{print > "inrange"; next}
print > "not_inrange"}' data calls
==> inrange <==
111111111 902123124 201605
111111111 902123123 201605
111111111 902123123 201605
111111111 016 201605240
111111111 470 201605240
111111111 600 201605240
==> not_inrange <==
111111111 902123125 201605
111111111 902123126 201605
111111111 902123126 201605
111111111 1 20160524011
111111111 3 20160524024
111111111 423 201605240
111111111 5 20160524053
111111111 400 424242432