繁体   English   中英

匹配两个文件以超出数字范围和范围

[英]Match two files to get out of range of numbers and within range

范围文件,例如(介于1-4和6-9之间的数字):

BlackList_B_Number.dat

1     4
6     9

这是输入文件。 例如:

OCS_VOICECALLS_1111_11_111111

111111111    1    201605240042070000000236OCS4252 3.6344   
111111111    2    201605240114430000000123OCS1154 03.0537  
111111111    3    201605240246070000000009OCS0707 018.6965 
111111111    4    201605240530500000000213OCS0130 01.8881  
111111111    5    201605240601120000000015OCS0156 015.8059 
111111111    6    201605240649100000000052OCS0269 02.3725  

我有兴趣从与黑名单输入文件相关的输入文件中过滤$ 2。 我想同时获得这两个输出:

Output1(输入记录超出过滤器):

111111111    5    201605240601120000000015OCS0156 015.8059 

Output2(过滤器中的输入记录):

111111111    1    201605240042070000000236OCS4252 3.6344   
111111111    2    201605240114430000000123OCS1154 03.0537  
111111111    3    201605240246070000000009OCS0707 018.6965 
111111111    4    201605240530500000000213OCS0130 01.8881  
111111111    6    201605240649100000000052OCS0269 02.3725 

我正在尝试许多选项,但是我只得到以下选项之一,而不是两个输出,只有其中一个:

awk '
    FNR==NR{low[NR]=$1+0;hi[NR]=$2+0;next}
   {for(i in low)if($2>=low[i]&&$2<=hi[i]){print $0}}
' BlackList_B_Number.dat OCS_VOICECALLS_1111_11_111111

111111111    1    201605240042070000000236OCS4252 3.6344     1.5570     2.0773     0     000000    0     0JAVIE
111111111    2    201605240114430000000123OCS1154 03.0537    1.8992     1.1545     0     000000    0     0PPIB7
111111111    3    201605240246070000000009OCS0707 018.6965   18.4730    0.2235     0     000000    0     0PPXS8
111111111    4    201605240530500000000213OCS0130 01.8881    0.0000     1.8881     0     000000    0     0PPIB5
111111111    6    201605240649100000000052OCS0269 02.3725    1.7978     0.5746     0     000000    0     0PPIB7

我如何同时获得另一个??:

111111111    5    201605240601120000000015OCS0156 015.8059 

提前致谢!!!

我会这样写:

filter="in"
awk -v filter="$filter" '
    NR == FNR {
        for (i=$1; i<=$2; i++) wanted[i]
        next
    }
    (filter == "in" && $2 in wanted) || (filter != "in" && !($2 in wanted))
' BlackList_B_Number.dat OCS_VOICECALLS_1111_11_111111

您可以使用shell变量$filter进行控制。

我不明白您的最后一个问题:如果您想同时进入和退出过滤器,请使用

cat OCS_VOICECALLS_1111_11_111111

我想我现在就知道了!!!!!:

filter =“ in” awk -v filter =“ $ filter”'NR == FNR {for(i = $ 1; i <= $ 2; i ++)想要[i];下一个}($ 2想要){print>“ FILE1 “}!(要价$ 2){print>” FILE2“}'BlackList_B_Number.dat OCS_VOICECALLS_1111_11_111111

猫FILE1 111111111 1 201605240042070000000236OCS4252 3.6344
111111111 2 201605240114430000000123OCS1154 03.0537 111111111 3 201605240246070000000009OCS0707 018.6965 111111111 6 201605240530500000000213OCS0130 01.8881 111111111 4 201605240601120000000015OCS0156 015.8059

猫FILE2 111111111 5 201605240649100000000052OCS0269 02.3725

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM