#!/usr/bin/awk -f

# range: TAZEL Output Filter

## Date&Time[UTC]        UnixTime   CatNo IntrDesg SatName(10)  Lon[deg] Lat[deg]     Alt[km]    Vel[m/s]   Az[deg]  El[deg]   Range[km]  rRate[m/s]       X[km]       Y[km]       Z[km]   XDOT[m/s]   YDOT[m/s]   ZDOT[m/s] # SatName(Full)            TLE-Epoch[UTC]          SetNo  Elapse[*]
#1980-08-17 07:06:40.000 0x13FCF180 11801 00000    SDP4-TestD*  +290.793  +38.034   +3116.717   +8225.371  +309.794  -22.224   +9837.935    -600.261   +7472.676    +428.073   +5828.775   +5107.632   +6444.712    -185.760 # SDP4-TestData:           1980-08-17 07:06:40.137     0    +0.000D
#      (00)         (01)       (02)  (03)     (04)        (05)      *06*     *07*        *08*        *09*      *10*     *11*        *12*        *13*        *14*        *15*        *16*        *17*        *18*        *19* !          (21)                  (22)         (23)  (24)       (25)

BEGIN{

# パラメータの取得＆設定

#	arry["DATE"          ]= 0;
#	arry["TIME"          ]= 1;
#	arry["UNIXTIME"      ]= 2;
#	arry["CATNO"         ]= 3;
#	arry["INTRDESG"      ]= 4;
#	arry["SATNAME(10)"   ]= 5;

	arry["LON"  ]= 6; arry["LAT"  ]= 7; arry["ALT"  ]= 8; arry["VEL"  ]= 9;
	arry["AZ"   ]=10; arry["EL"   ]=11; arry["RANGE"]=12; arry["RRATE"]=13;
	arry["X"    ]=14; arry["Y"    ]=15; arry["Z"    ]=16; arry["XDOT" ]=17; arry["YDOT" ]=18; arry["ZDOT" ]=19;

#	arry["SATNAME(FULL)" ]=21;
#	arry["TLE-EPOCH.DATE"]=22;
#	arry["TLE-EPOCH.TIME"]=23;
#	arry["SETNO"         ]=24;
#	arry["ELAPSE"        ]=25;

	if( ARGC!=2 && ARGC!=3 ){
		printf("\n");
		printf("range - TAZEL Output Filter\n");
		printf("Copyright (C) 2012-2018 \"NekoMimi\" <twintail@angelmode.net>\n");
		printf("This is a GPL and/or LGPL free software; see the COPYING documents in detail.\n");
		printf("\n");
		printf("Usage: range {Lon,Lat,Alt,Vel,Az,El,Range,rRate,X,Y,Z,XDOT,YDOT,ZDOT}=Low:High [FileName]\n")
		printf("\n");
		printf("( Example )\n");
		printf("  % range lon=+135:+145   ( +135.00<= Lon[deg] <=+145.00 )\n");
		printf("  % range alt=:+500       (           alt[km ] <=+500.00 )\n");
		printf("  % range vel=+500:       ( +500.00<= vel[m/s]           )\n");
		printf("\n");
		exit(1)
	}

# ここでのコマンドラインパラメータの受け渡し方法はややトリッキーです。
# ARGV[1]は"="文字が含まれているため、AWKではフィルタ処理の対象ファイル名とはみなしません。
# そうではなくて、続くARGV[2]をフィルタ処理の対象ファイル名とみなします。

	split(toupper(ARGV[1]),temp,"[=:]")
	lhs=temp[1]; id=arry[lhs]
	vl =temp[2]+0.0; if( temp[2]=="" ){ vl=-999999.999 }		### Empty -> TAZEL MIN_VALUE ###
	vh =temp[3]+0.0; if( temp[3]=="" ){ vh=+999999.999 }		### Empty -> TAZEL MAX_VALUE ###

###	printf("# param: [%s(%d)] = [%+f] : [%+f]\n",lhs,id,vl,vh)	### デバッグ用 ###

}

{

# コメント行の破棄
	if( substr($0,1,1)=="#" ){ next }

# 条件一致行の出力
	split($0,temp," ")
	if( vl<=temp[id+1] && temp[id+1]<=vh ){
		printf("%s\n",$0)
	}

}
