Skip to content

Commit fb510d3

Browse files
committed
support file created on windows
1 parent a9ab5bd commit fb510d3

File tree

2 files changed

+31
-16
lines changed

2 files changed

+31
-16
lines changed

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ you can download a binary release
6161
```sh
6262
# Install with wget or curl
6363
## set the latest version on releases.
64-
VERSION=v1.0.22
64+
VERSION=v1.0.23
6565
## case you use wget
6666
wget https://github.com/solaoi/colc/releases/download/$VERSION/colc_linux_amd64.tar.gz
6767
## case you use curl
@@ -95,7 +95,6 @@ colc 2 some.csv
9595

9696
<img width="379" alt="スクリーンショット 2022-03-30 18 03 08" src="https://user-images.githubusercontent.com/46414076/160794228-e7f444e9-3cf8-4e3a-96de-2d1df08d2cb5.png">
9797

98-
9998
Of course `-b,--binsize` works well:)
10099

101100
```

colc.ts

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import {
77
import { runner } from "./lib/common.ts";
88
import { parse } from "https://deno.land/std@0.66.0/flags/mod.ts";
99

10-
const colcVersion = "v1.0.22"
11-
const colcDescription = `Complete documentation is available at https://github.com/solaoi/colc
10+
const colcVersion = "v1.0.23";
11+
const colcDescription =
12+
`Complete documentation is available at https://github.com/solaoi/colc
1213
1314
Usage:
1415
colc [column] [file.csv|tsv|txt]
@@ -19,9 +20,23 @@ Options:
1920
-b,--binsize <number> : show frequency table and histogram
2021
-f,--filter <number(1-99)> : with binsize option, filter frequency
2122
-v,--version : show version
22-
-h,--help : show help`
23+
-h,--help : show help`;
2324

24-
const { _, binsize, b, filter, f, check, c, precision, p, help,h,version,v } = parse(Deno.args);
25+
const {
26+
_,
27+
binsize,
28+
b,
29+
filter,
30+
f,
31+
check,
32+
c,
33+
precision,
34+
p,
35+
help,
36+
h,
37+
version,
38+
v,
39+
} = parse(Deno.args);
2540
const [column, filename] = _;
2641
const hasTwoColumn = (() => {
2742
if (typeof column !== "string") return false;
@@ -32,12 +47,12 @@ const hasTwoColumn = (() => {
3247
Number.isInteger(parseInt(columns[1]));
3348
})();
3449

35-
if(h !== undefined || help !== undefined ){
50+
if (h !== undefined || help !== undefined) {
3651
console.log(colcDescription);
3752
Deno.exit(0);
3853
}
3954

40-
if(v !== undefined || version !== undefined ){
55+
if (v !== undefined || version !== undefined) {
4156
console.log(colcVersion);
4257
Deno.exit(0);
4358
}
@@ -94,7 +109,7 @@ if (hasTwoColumn) {
94109
}
95110
bash.push("| awk");
96111
bash.push(
97-
`'BEGIN{OFMT="%.${awkPrecision}f"}{split($1,col,",");asum+=col[1];a[NR]=col[1];bsum+=col[2];b[NR]=col[2]}END{amean=asum/NR;bmean=bsum/NR;for(i in a){as+=(a[i]-amean)^2;bs+=(b[i]-bmean)^2;sum+=(a[i]-amean)*(b[i]-bmean)};astddev=sqrt(as/NR);bstddev=sqrt(bs/NR);print sum/NR/astddev/bstddev}'`,
112+
`'BEGIN{OFMT="%.${awkPrecision}f"}{sub(/\r$/,\"\",$1)}{split($1,col,",");asum+=col[1];a[NR]=col[1];bsum+=col[2];b[NR]=col[2]}END{amean=asum/NR;bmean=bsum/NR;for(i in a){as+=(a[i]-amean)^2;bs+=(b[i]-bmean)^2;sum+=(a[i]-amean)*(b[i]-bmean)};astddev=sqrt(as/NR);bstddev=sqrt(bs/NR);print sum/NR/astddev/bstddev}'`,
98113
);
99114
return bash.join(" ");
100115
})();
@@ -123,13 +138,14 @@ if (hasCheck) {
123138
);
124139
}
125140
bash.push(
126-
"| awk '{clean=($1 ~/^[0-9.-]+$/);if(!clean)exit}END{print clean}'",
141+
"| awk 'BEGIN{dirty=0}{sub(/\r$/,\"\",$1)}!/^-?[0-9]*.?[0-9]+$/{dirty=1;exit}END{print dirty}'",
127142
);
128143
return bash.join(" ");
129144
})();
145+
130146
const result = await runner
131147
.run(checkCommand);
132-
const hasError = result === "0";
148+
const hasError = result === "1";
133149
if (hasError) {
134150
console.log("dirty:<");
135151
Deno.exit(1);
@@ -152,7 +168,7 @@ if (binSize === null) {
152168
}
153169
bash.push("| sort -n | awk");
154170
bash.push(
155-
`'BEGIN{OFMT="%.${awkPrecision}f"}NR==1{min=$1}{if(0==$1)zeros++;if($1<0)neg++;sum+=$1;d[NR]=$1}END{avg=sum/NR;for(i in d)s+=(d[i]-avg)^2;stddev=sqrt(s/(NR-1));for(i in d){t+=((d[i]-avg)/stddev)^3;u+=((d[i]-avg)/stddev)^4};q1=(3*d[int((NR-1)/4)+1]+d[int((NR-1)/4)+2])/4;q3=(d[int(3*(NR-1)/4)+1]+3*d[int(3*(NR-1)/4)+2])/4;iqr=q3-q1;stur=1+log(NR)/log(2);sturi=int(stur);sturges=stur>sturi?sturi+1:sturi;max=d[NR];range=max-min;sqrtnr=sqrt(NR);threerootnr=exp(log(NR)/3);print stddev,avg,sum,NR,max,min,sqrt(s/(NR-1))/sqrtnr,s/(NR-1),(NR%2)?d[(NR+1)/2]:(d[NR/2]+d[NR/2+1])/2,avg+stddev,avg-stddev,avg+2*stddev,avg-2*stddev,avg+3*stddev,avg-3*stddev,range/sturges,(3.5*stddev)/threerootnr,q1,q3,iqr,q1-1.5*iqr,q3+1.5*iqr,range/sqrtnr,2*iqr/threerootnr,range,zeros,zeros*100/NR,neg,neg*100/NR,stddev/avg,NR*t/((NR-1)*(NR-2)),NR*(NR+1)*u/(NR-1)/(NR-2)/(NR-3)-3*(NR-1)^2/(NR-2)/(NR-3)}'`,
171+
`'BEGIN{OFMT="%.${awkPrecision}f"}{sub(/\r$/,\"\",$1)}NR==1{min=$1}{if(0==$1)zeros++;if($1<0)neg++;sum+=$1;d[NR]=$1}END{avg=sum/NR;for(i in d)s+=(d[i]-avg)^2;stddev=sqrt(s/(NR-1));for(i in d){t+=((d[i]-avg)/stddev)^3;u+=((d[i]-avg)/stddev)^4};q1=(3*d[int((NR-1)/4)+1]+d[int((NR-1)/4)+2])/4;q3=(d[int(3*(NR-1)/4)+1]+3*d[int(3*(NR-1)/4)+2])/4;iqr=q3-q1;stur=1+log(NR)/log(2);sturi=int(stur);sturges=stur>sturi?sturi+1:sturi;max=d[NR];range=max-min;sqrtnr=sqrt(NR);threerootnr=exp(log(NR)/3);print stddev,avg,sum,NR,max,min,sqrt(s/(NR-1))/sqrtnr,s/(NR-1),(NR%2)?d[(NR+1)/2]:(d[NR/2]+d[NR/2+1])/2,avg+stddev,avg-stddev,avg+2*stddev,avg-2*stddev,avg+3*stddev,avg-3*stddev,range/sturges,(3.5*stddev)/threerootnr,q1,q3,iqr,q1-1.5*iqr,q3+1.5*iqr,range/sqrtnr,2*iqr/threerootnr,range,zeros,zeros*100/NR,neg,neg*100/NR,stddev/avg,NR*t/((NR-1)*(NR-2)),NR*(NR+1)*u/(NR-1)/(NR-2)/(NR-3)-3*(NR-1)^2/(NR-2)/(NR-3)}'`,
156172
);
157173
return bash.join(" ");
158174
})();
@@ -189,7 +205,7 @@ if (binSize === null) {
189205
negativeRate,
190206
cv,
191207
skewness,
192-
kurtosis
208+
kurtosis,
193209
] = await runner
194210
.run(statsCommand).then((s) => s.split(" "));
195211
const sturgesFormulaIsInvalid = count.split(".")[0].length <= 2 &&
@@ -218,8 +234,8 @@ if (binSize === null) {
218234
};
219235
const distribution = {
220236
"skewness": comma(skewness),
221-
"kurtosis": comma(kurtosis)
222-
}
237+
"kurtosis": comma(kurtosis),
238+
};
223239
const stds = {
224240
"stddev(σ)": comma(stddev),
225241
"stderr": comma(stderr),
@@ -287,7 +303,7 @@ const freqCommand = (() => {
287303
}
288304
bash.push("| awk");
289305
bash.push(
290-
`'BEGIN{OFMT="%.${awkPrecision}f"}{b=int($1/${binSize});a[b]++;bmax=b>bmax?b:bmax;bmin=b<bmin?b:bmin}END{freq="";for(i in a)freq=freq "|" i "_" a[i];print NR, freq, bmin, bmax}'`,
306+
`'BEGIN{OFMT="%.${awkPrecision}f"}{sub(/\r$/,\"\",$1)}{b=int($1/${binSize});a[b]++;bmax=b>bmax?b:bmax;bmin=b<bmin?b:bmin}END{freq="";for(i in a)freq=freq "|" i "_" a[i];print NR, freq, bmin, bmax}'`,
291307
);
292308
return bash.join(" ");
293309
})();

0 commit comments

Comments
 (0)