2017-02-01 21 views
0

ファイルを取得するための一致2つのファイルは、( - 4,6 - 1の間の数字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フィルタに興味イム。

出力1(フィルタのうち入力レコード):

111111111 5 201605240601120000000015OCS0156 015.8059 

出力2(フィルタ内の入力レコード):I'dは、これらの両方の出力を取得したいと

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 

を私は多くのオプションをtriyingましたしかし、私はこれらのオプションのいずれかを得て、両方の出力ではなく、そのうちの1つだけを取得します:

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 

どのように私はoth同時に?? 1つのER:事前に

111111111 5 201605240601120000000015OCS0156 015.8059 

感謝!

+0

。すべての空白が圧縮され、改行が消えます。 –

+0

別の質問...あなたはawk -f program.awkとして実行するために、以前のスクリプトを "program.awk"に変更したり、どのように変更しますか? ありがとうございます。 – alvaronistal

答えて

1

私はこれを記述します。

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 

あなたは、制御するためのシェル変数$filterを使用することができます。

私はあなたの最後の質問を理解していない:あなたは、フィルタの中と外の両方たい場合は、

cat OCS_VOICECALLS_1111_11_111111 
+0

別の質問... awk -f program.awkとして実行するために、あなたはどのようにアダプテートしたり、以前のスクリプトを "program.awk"に切り替えるのですか? ありがとうございます。 – alvaronistal

+0

一重引用符で囲まれたすべてがawkファイルに入ります。 –

0

を使用し、私は私はちょうど今それを得たと思います!!!!!:

フィルタを= $ FNR {for(i = $ 1; i < = $ 2; i ++)は、[i]; next}を望みました($ 2が欲しい){print> "FILE1" }!(指名手配中$ 2){プリント> "FILE2"}」BlackList_B_Number.dat OCS_VOICECALLS_1111_11_111111

猫FILE1 111111111 1 2016052400420700000002あなたがそのまま印刷されることになっているテキストをインデントする必要が36OCS4252 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