1+ var fs = require ( 'fs' ) ;
2+ var http = require ( 'http' ) ;
3+ var readline = require ( 'readline' ) ;
4+ var yargs = require ( 'yargs' ) ;
5+
6+ let argv = yargs
7+ . default ( {
8+ 'columns' : '' ,
9+ 'start' : '0001-01-01T00:00:00.000000000Z' ,
10+ 'stop' : '9999-12-31T23:59:59.999999999Z' ,
11+ 'file' : '' ,
12+ 'url' : '' ,
13+ 'format' : 'csv'
14+ } )
15+ . option ( 'columns' , { type :'string' } )
16+ . option ( 'start' , { type :'string' } )
17+ . option ( 'stop' , { type :'string' } )
18+ . argv ;
19+
20+ function range ( start , end ) {
21+ var arr = [ ] ;
22+ for ( var i = start ; i <= end ; i += 1 ) {
23+ arr . push ( i ) ;
24+ }
25+ return arr ;
26+ }
27+
28+ let columnsarr = [ ] ;
29+ if ( argv . columns !== '' ) {
30+ // Convert, e.g, "1,2,4-6" to [1,2,4,5,6] - 1
31+ let tmp = argv . columns . split ( "," ) ;
32+ for ( i = 0 ; i < tmp . length ; i ++ ) {
33+ if ( / - / . test ( tmp [ i ] ) ) {
34+ tmp2 = tmp [ i ] . split ( "-" ) ;
35+ let expanded = range ( parseInt ( tmp2 [ 0 ] ) - 1 , parseInt ( tmp2 [ 1 ] ) - 1 ) ;
36+ columnsarr = columnsarr . concat ( expanded ) ;
37+ } else {
38+ columnsarr . push ( tmp [ i ] - 1 ) ;
39+ }
40+ }
41+ } else {
42+ columnsarr = null ;
43+ }
44+
45+ if ( argv . file !== '' ) {
46+ if ( argv . format !== 'csv' ) {
47+ console . log ( 'Only --format=csv is implemented' ) ;
48+ process . exit ( 1 ) ;
49+ }
50+ readlines ( fs . createReadStream ( argv . file ) ) ;
51+ } else if ( argv . url !== '' ) {
52+ http . get ( argv . url , res => readlines ( res ) ) ;
53+ } else {
54+ readlines ( process . stdin ) ;
55+ }
56+
57+ function readlines ( readableStream ) {
58+ var rl = readline . createInterface ( {
59+ input : readableStream ,
60+ output : process . stdout ,
61+ terminal : false
62+ } )
63+ . on ( 'line' , function ( line ) {
64+ let linea = line . split ( ',' ) ;
65+ let time = linea [ 0 ] ;
66+ let l = time . length ;
67+ let m = Math . min ( l , argv . start . length , argv . stop . length ) ;
68+ let start = argv . start . slice ( 0 , m ) ;
69+ let stop = argv . stop . slice ( 0 , m ) ;
70+ time = time . slice ( 0 , m ) ;
71+ if ( time >= start && time < stop ) {
72+ if ( columnsarr == null ) {
73+ console . log ( line ) ;
74+ } else {
75+ line = "" ;
76+ for ( let i = 0 ; i < columnsarr . length ; i ++ ) {
77+ line = line + linea [ columnsarr [ i ] ] + "," ;
78+ }
79+ console . log ( line . slice ( 0 , - 1 ) ) ;
80+ }
81+ }
82+ if ( time >= stop ) {
83+ process . exit ( 0 ) ;
84+ }
85+ } )
86+ }
0 commit comments