awk formatera flyttal

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av Maalobs »

Nej det där sorterar på andra kolumnen, men man måste ju börja någonstans.
OK, det är bara 8-bitars ASCII och inga konstiga tecken, så inga komplikationer.

Vad är det du vill göra egentligen?
Visa lite faktiskt data där du har avpersonifierat personuppgifter, annars kan man bara spekulera i vad du vill.
Har du data där flera rader kan ha samma värde i kolumn två, och du vill att de specifika raderna i sin tur ska sorteras på kolumn tre, och att varje sådant sorterat delresultat med samma värde i kolumn två ska sparas i en separat fil?

Jag skulle loopa igenom varje rad i det redan uppstädade utdatat och fånga in det i en hash, där andra posten är key och hela raden är value.
Sedan för varje unik key loopar man igenom alla values där man nu skapar en ny hash med key på tredje posten och återigen har hela raden som value.
Då sorterar man på keys (vilket nu är tredje kolumnen) och printar ut varje value in i en fil med nåt lämpligt namn, typ den yttre loopens iterationsnummer.

Regex för att fånga andra postens värde:
m/^[^;]+;([^;]+);/
Nu finns värdet i $1.

I den inre loopen för att fånga den tredje postens värde är det bara att använda samma metod:
m/^[^;]+;[^;]+;([^;]+);/
Nu finns värdet i $1.

Hur det fungerar, om du är ovan med regular expressions:

Kod: Markera allt

$ cat infil.csv | sed 'y/,/;/;y/./,/;s/ *; */;/g' | sort -t \; -k2 | perl -wnle 'print $1 if m/^[^;]+;([^;]+);/'
namn1
namn2
namn3
namn4
namn5
namn6
namn7
namn8
namn9
$ cat infil.csv | sed 'y/,/;/;y/./,/;s/ *; */;/g' | sort -t \; -k2 | perl -wnle 'print $1 if m/^[^;]+;[^;]+;([^;]+);/'
23
23
23
23
23
23
23
23
23
Eftersom du försöker lösa det här från kommandoraden istället för att använda en pivot-tabell i ett kalkylblad; ska det vara en del av en schemalagd integration mellan olika system, en export/import?
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av Maalobs »

Eller kanske inte så smart med hashes förresten när jag tänker längre än näsan räcker, det blir ju identisk key i det här fallet så det funkar ju inte.
Du får spara undan de hela data-raderna i en array baserat på om raderna har en identisk post 2 eller inte.

Men hela den här ursprungliga frågerställningen dryper av ett XY-problem och du har ännu inte förklarat omständigheterna till vad du försöker göra.
Definitionen av ett XY-problem är:
Du har problem X och tror att Y är lösningen.
Men du vet inte hur man gör Y så du frågar om hjälp med det.
Men Y är inte lösningen på ditt problem, du måste fråga om hjälp med X.

Vem kommer på 2021 att man ska göra något med awk såvida man inte är entusiast i datorhistoria. :D
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av hummel »

Maalobs skrev: 19 december 2021, 12:48:43 Nej det där sorterar på andra kolumnen, men man måste ju börja någonstans.
OK, det är bara 8-bitars ASCII och inga konstiga tecken, så inga komplikationer.

Vad är det du vill göra egentligen?
Visa lite faktiskt data där du har avpersonifierat personuppgifter, annars kan man bara spekulera i vad du vill.
Har du data där flera rader kan ha samma värde i kolumn två, och du vill att de specifika raderna i sin tur ska sorteras på kolumn tre, och att varje sådant sorterat delresultat med samma värde i kolumn två ska sparas i en separat fil?

Jag skulle loopa igenom varje rad i det redan uppstädade utdatat och fånga in det i en hash, där andra posten är key och hela raden är value.
Sedan för varje unik key loopar man igenom alla values där man nu skapar en ny hash med key på tredje posten och återigen har hela raden som value.
Då sorterar man på keys (vilket nu är tredje kolumnen) och printar ut varje value in i en fil med nåt lämpligt namn, typ den yttre loopens iterationsnummer.


Eftersom du försöker lösa det här från kommandoraden istället för att använda en pivot-tabell i ett kalkylblad; ska det vara en del av en schemalagd integration mellan olika system, en export/import?
Först gjordes försök att använda Excel och pivottabeller. Indata är ofta 1-5 miljoner rader och då fungerar dåligt med Excel.

Det är en lösning som kommer användas ett par månader för att verifiera laddning och självurladdning av batterier vid olika temperaturer.
Men hela den här ursprungliga frågerställningen dryper av ett XY-problem och du har ännu inte förklarat omständigheterna till vad du försöker göra.
Definitionen av ett XY-problem är:
Du har problem X och tror att Y är lösningen.
Men du vet inte hur man gör Y så du frågar om hjälp med det.
Men Y är inte lösningen på ditt problem, du måste fråga om hjälp med X.

Vem kommer på 2021 att man ska göra något med awk såvida man inte är entusiast i datorhistoria. :D
Du har helt rätt i ovan och tror svaren här ska hjälpa till led förklaringen.
Awk är absolut inget krav, utan såg till en början ut att vara en snabb lösning. :-)
Det är lämpligt om lösningen fungerar under Debian Linux och macOS.

Hoppas det nedan bringar mer ljus över min vaga frågeställning.
Här kommer riktiga data (inga personuppgifter har någonsin funnits i datat. :-))
Det är ett urval av 8 utdatafiler av något 50-tal. Vilka filer som är intressanta beror på om jag vill kontrollera laddning, urladdning, självurladdning eller termisk kapacitans i batteripaketet.

Kod: Markera allt

Fil 1. Sorterad på 23, data, sensor,Current och DC_OUT
1635524284,206;data,sensor,Current;23;DC_OUT;0,1
1635524284,207;data,sensor,Voltage;23;DC_IN;1,4
1635524285,207;data,sensor,Voltage;23;DC_IN;1,4

Fil 2. Sorterad på 23, data, sensor,Current och BATT_1_CHG 
1635524284,242;data,sensor,Current;23;BATT_1_CHG;0,0
1635524285,242;data,sensor,Current;23;BATT_1_CHG;0,0
1635524285,242;data,sensor,Current;23;BATT_1_CHG;0,0

Fil 3. Sorterad på 23, data, sensor,Temp och BATT_1
1635524284,244;data,sensor,Temp;23;BATT_1;25,5
1635524285,244;data,sensor,Temp;23;BATT_1;25,5
1635524286,244;data,sensor,Temp;23;BATT_1;25,5

Fil 4. Sorterad på 23, data, sensor,Temp och BATT_1
1635524284,248;data,sensor,Temp;23;BATT_2;25,8
1635524285,248;data,sensor,Temp;23;BATT_2;25,8
1635524286,249;data,sensor,Temp;23;BATT_2;25,8

Fil 5. Sorterad på 23, data, sensor,Temp och BATT_1_AUX
1635524284,245;data,sensor,Temp;23;BATT_1_AUX;25,5
1635524285,245;data,sensor,Temp;23;BATT_1_AUX;25,4
1635524286,245;data,sensor,Temp;23;BATT_1_AUX;25,5

Fil 6. Sorterad på 20, data, sensor,Current och BATT_1_CHG 
1635524284,387;data,sensor,Current;20;BATT_1_CHG;-0,0
1635524285,387;data,sensor,Current;20;BATT_1_CHG;0,0
1635524285,387;data,sensor,Current;20;BATT_1_CHG;0,0

Fil 7. Sorterad på 20, data, sensor,Current och BATT_1
1635524284,390;data,sensor,Temp;20;BATT_1;25,6
1635524285,390;data,sensor,Temp;20;BATT_1;25,6
1635524286,390;data,sensor,Temp;20;BATT_1;25,6

Fil 8. Sorterad på 20, data, sensor,Current och BATT_1_AUX
1635524284,391;data,sensor,Temp;20;BATT_1_AUX;25,6
1635524285,391;data,sensor,Temp;20;BATT_1_AUX;25,6
1635524286,391;data,sensor,Temp;20;BATT_1_AUX;25,6


Detta är en snippet av otvättad indatafil

Kod: Markera allt

1635524284.206,data.sensor.Current,23,DC_OUT,0.1
1635524284.207,data.sensor.Voltage,23,DC_IN,1.4
1635524284.208,data.sensor.Temp,23,PCBA,25.5
1635524284.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524284.243,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524284.244,data.senpwdsor.Temp,23,BATT_1,25.5
1635524284.245,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524284.246,data.sensor.Current,23,BATT_2_CHG,0.0
1635524284.247,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524284.248,data.sensor.Temp,23,BATT_2,25.8
1635524284.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524284.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524284.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524284.253,data.sensor.Temp,23,BATT_3,25.7
1635524284.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524284.255,data.sensor.Temp,23,BATT_4,25.8
1635524284.256,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524284.257,data.sensor.Temp,23,BATT_5,25.5
1635524284.258,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524284.259,data.sensor.Current,23,BATT_4_CHG,0.0
1635524284.260,data.sensor.Current,23,BATT_5_CHG,0.0
1635524284.261,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524284.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524284.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.8,3000.0,0.3,0.0
1635524284.334,data.sensor.Current,20,DC_OUT,0.0
1635524284.335,data.sensor.Voltage,20,DC_IN,0.8
1635524284.336,data.sensor.Temp,20,PCBA,26.0
1635524284.387,data.sensor.Current,20,BATT_1_CHG,-0.0
1635524284.388,data.sensor.Voltage,20,BATT_1_OUT,24.7
1635524284.390,data.sensor.Temp,20,BATT_1,25.6
1635524284.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524284.392,data.sensor.Current,20,BATT_2_CHG,-0.0
1635524284.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524284.394,data.sensor.Temp,20,BATT_2,25.7
1635524284.395,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524284.396,data.sensor.Current,20,BATT_3_CHG,0.0
1635524284.397,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524284.398,data.sensor.Temp,20,BATT_3,25.6
1635524284.399,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524284.400,data.sensor.Temp,20,BATT_4,25.6
1635524284.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524284.403,data.sensor.Temp,20,BATT_5,25.4
1635524284.404,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524284.405,data.sensor.Current,20,BATT_4_CHG,0.0
1635524284.406,data.sensor.Current,20,BATT_5_CHG,0.0
1635524284.407,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524284.408,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524284.409,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.1,3000.0,-0.1,0.0
1635524285.206,data.sensor.Current,23,DC_OUT,0.1
1635524285.207,data.sensor.Voltage,23,DC_IN,1.4
1635524285.208,data.sensor.Temp,23,PCBA,25.5
1635524285.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524285.243,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524285.244,data.sensor.Temp,23,BATT_1,25.5
1635524285.245,data.sensor.Temp,23,BATT_1_AUX,25.4
1635524285.246,data.sensor.Current,23,BATT_2_CHG,0.0
1635524285.247,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524285.248,data.sensor.Temp,23,BATT_2,25.8
1635524285.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524285.251,data.sensor.Current,23,BATT_3_CHG,-0.0
1635524285.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524285.253,data.sensor.Temp,23,BATT_3,25.7
1635524285.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524285.255,data.sensor.Temp,23,BATT_4,25.8
1635524285.256,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524285.257,data.sensor.Temp,23,BATT_5,25.5
1635524285.258,data.sensor.Temp,23,BATT_5_AUX,25.3
1635524285.259,data.sensor.Current,23,BATT_4_CHG,-0.0
1635524285.260,data.sensor.Current,23,BATT_5_CHG,0.0
1635524285.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524285.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524285.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524285.334,data.sensor.Current,20,DC_OUT,0.0
1635524285.335,data.sensor.Voltage,20,DC_IN,0.8
1635524285.336,data.sensor.Temp,20,PCBA,26.0
1635524285.387,data.sensor.Current,20,BATT_1_CHG,0.0
1635524285.388,data.sensor.Voltage,20,BATT_1_OUT,24.8
1635524285.390,data.sensor.Temp,20,BATT_1,25.6
1635524285.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524285.392,data.sensor.Current,20,BATT_2_CHG,0.0
1635524285.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524285.394,data.sensor.Temp,20,BATT_2,25.7
1635524285.395,data.sensor.Temp,20,BATT_2_AUX,25.6
1635524285.396,data.sensor.Current,20,BATT_3_CHG,-0.0
1635524285.397,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524285.398,data.sensor.Temp,20,BATT_3,25.6
1635524285.399,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524285.401,data.sensor.Temp,20,BATT_4,25.6
1635524285.402,data.sensor.Temp,20,BATT_4_AUX,25.5
1635524285.403,data.sensor.Temp,20,BATT_5,25.3
1635524285.404,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524285.405,data.sensor.Current,20,BATT_4_CHG,0.0
1635524285.406,data.sensor.Current,20,BATT_5_CHG,0.0
1635524285.407,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524285.408,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524285.409,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.1,3000.0,-0.1,0.0
1635524286.206,data.sensor.Current,23,DC_OUT,0.1
1635524286.207,data.sensor.Voltage,23,DC_IN,1.4
1635524286.208,data.sensor.Temp,23,PCBA,25.5
1635524286.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524286.243,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524286.244,data.sensor.Temp,23,BATT_1,25.5
1635524286.245,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524286.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524286.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524286.249,data.sensor.Temp,23,BATT_2,25.8
1635524286.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524286.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524286.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524286.253,data.sensor.Temp,23,BATT_3,25.7
1635524286.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524286.255,data.sensor.Temp,23,BATT_4,25.8
1635524286.256,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524286.257,data.sensor.Temp,23,BATT_5,25.5
1635524286.258,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524286.260,data.sensor.Current,23,BATT_4_CHG,-0.0
1635524286.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524286.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524286.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524286.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.8,3000.0,0.3,0.0
1635524286.334,data.sensor.Current,20,DC_OUT,0.0
1635524286.335,data.sensor.Voltage,20,DC_IN,0.8
1635524286.336,data.sensor.Temp,20,PCBA,26.0
1635524286.388,data.sensor.Current,20,BATT_1_CHG,0.0
1635524286.389,data.sensor.Voltage,20,BATT_1_OUT,24.8
1635524286.390,data.sensor.Temp,20,BATT_1,25.6
1635524286.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524286.392,data.sensor.Current,20,BATT_2_CHG,0.0
1635524286.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524286.394,data.sensor.Temp,20,BATT_2,25.7
1635524286.395,data.sensor.Temp,20,BATT_2_AUX,25.6
1635524286.396,data.sensor.Current,20,BATT_3_CHG,0.0
1635524286.397,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524286.399,data.sensor.Temp,20,BATT_3,25.7
1635524286.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524286.401,data.sensor.Temp,20,BATT_4,25.6
1635524286.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524286.403,data.sensor.Temp,20,BATT_5,25.4
1635524286.404,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524286.405,data.sensor.Current,20,BATT_4_CHG,0.0
1635524286.406,data.sensor.Current,20,BATT_5_CHG,0.0
1635524286.407,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524286.408,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524286.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.1,3000.0,-0.1,0.0
1635524287.206,data.sensor.Current,23,DC_OUT,0.1
1635524287.207,data.sensor.Voltage,23,DC_IN,1.4
1635524287.208,data.sensor.Temp,23,PCBA,25.5
1635524287.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524287.243,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524287.244,data.sensor.Temp,23,BATT_1,25.5
1635524287.245,data.sensor.Temp,23,BATT_1_AUX,25.4
1635524287.246,data.sensor.Current,23,BATT_2_CHG,0.0
1635524287.247,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524287.249,data.sensor.Temp,23,BATT_2,25.8
1635524287.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524287.251,data.sensor.Current,23,BATT_3_CHG,-0.0
1635524287.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524287.253,data.sensor.Temp,23,BATT_3,25.7
1635524287.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524287.255,data.sensor.Temp,23,BATT_4,25.8
1635524287.256,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524287.257,data.sensor.Temp,23,BATT_5,25.5
1635524287.258,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524287.259,data.sensor.Current,23,BATT_4_CHG,0.0
1635524287.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524287.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524287.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524287.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524287.334,data.sensor.Current,20,DC_OUT,0.0
1635524287.335,data.sensor.Voltage,20,DC_IN,0.7
1635524287.336,data.sensor.Temp,20,PCBA,26.0
1635524287.387,data.sensor.Current,20,BATT_1_CHG,-0.0
1635524287.389,data.sensor.Voltage,20,BATT_1_OUT,24.8
1635524287.390,data.sensor.Temp,20,BATT_1,25.6
1635524287.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524287.392,data.sensor.Current,20,BATT_2_CHG,-0.0
1635524287.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524287.394,data.sensor.Temp,20,BATT_2,25.7
1635524287.395,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524287.396,data.sensor.Current,20,BATT_3_CHG,-0.0
1635524287.397,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524287.398,data.sensor.Temp,20,BATT_3,25.6
1635524287.399,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524287.401,data.sensor.Temp,20,BATT_4,25.6
1635524287.402,data.sensor.Temp,20,BATT_4_AUX,25.5
1635524287.403,data.sensor.Temp,20,BATT_5,25.4
1635524287.404,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524287.405,data.sensor.Current,20,BATT_4_CHG,0.0
1635524287.406,data.sensor.Current,20,BATT_5_CHG,0.0
1635524287.407,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524287.408,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524287.409,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.2,3000.0,-0.1,0.0
1635524288.206,data.sensor.Current,23,DC_OUT,0.1
1635524288.207,data.sensor.Voltage,23,DC_IN,1.4
1635524288.208,data.sensor.Temp,23,PCBA,25.5
1635524288.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524288.243,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524288.244,data.sensor.Temp,23,BATT_1,25.5
1635524288.245,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524288.246,data.sensor.Current,23,BATT_2_CHG,0.0
1635524288.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524288.249,data.sensor.Temp,23,BATT_2,25.8
1635524288.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524288.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524288.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524288.253,data.sensor.Temp,23,BATT_3,25.7
1635524288.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524288.255,data.sensor.Temp,23,BATT_4,25.8
1635524288.256,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524288.257,data.sensor.Temp,23,BATT_5,25.5
1635524288.258,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524288.259,data.sensor.Current,23,BATT_4_CHG,0.0
1635524288.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524288.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524288.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524288.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524288.334,data.sensor.Current,20,DC_OUT,0.0
1635524288.335,data.sensor.Voltage,20,DC_IN,0.8
1635524288.336,data.sensor.Temp,20,PCBA,26.0
1635524288.387,data.sensor.Current,20,BATT_1_CHG,-0.0
1635524288.389,data.sensor.Voltage,20,BATT_1_OUT,24.8
1635524288.390,data.sensor.Temp,20,BATT_1,25.6
1635524288.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524288.392,data.sensor.Current,20,BATT_2_CHG,0.0
1635524288.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524288.394,data.sensor.Temp,20,BATT_2,25.7
1635524288.395,data.sensor.Temp,20,BATT_2_AUX,25.6
1635524288.396,data.sensor.Current,20,BATT_3_CHG,-0.0
1635524288.397,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524288.398,data.sensor.Temp,20,BATT_3,25.6
1635524288.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524288.401,data.sensor.Temp,20,BATT_4,25.6
1635524288.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524288.403,data.sensor.Temp,20,BATT_5,25.3
1635524288.404,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524288.405,data.sensor.Current,20,BATT_4_CHG,-0.0
1635524288.406,data.sensor.Current,20,BATT_5_CHG,0.0
1635524288.407,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524288.408,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524288.409,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.2,3000.0,-0.1,0.0
1635524289.206,data.sensor.Current,23,DC_OUT,0.1
1635524289.207,data.sensor.Voltage,23,DC_IN,1.4
1635524289.208,data.sensor.Temp,23,PCBA,25.5
1635524289.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524289.243,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524289.244,data.sensor.Temp,23,BATT_1,25.5
1635524289.246,data.sensor.Temp,23,BATT_1_AUX,25.4
1635524289.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524289.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524289.249,data.sensor.Temp,23,BATT_2,25.8
1635524289.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524289.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524289.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524289.253,data.sensor.Temp,23,BATT_3,25.7
1635524289.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524289.255,data.sensor.Temp,23,BATT_4,25.8
1635524289.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524289.258,data.sensor.Temp,23,BATT_5,25.5
1635524289.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524289.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524289.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524289.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524289.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524289.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524289.334,data.sensor.Current,20,DC_OUT,0.0
1635524289.335,data.sensor.Voltage,20,DC_IN,0.8
1635524289.336,data.sensor.Temp,20,PCBA,26.0
1635524289.388,data.SetChargePower.Request,20,4,24.8,0.1
1635524289.388,data.sensor.Current,20,BATT_1_CHG,-0.0
1635524289.389,data.sensor.Voltage,20,BATT_1_OUT,24.8
1635524289.390,data.sensor.Temp,20,BATT_1,25.6
1635524289.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524289.392,data.sensor.Current,20,BATT_2_CHG,0.0
1635524289.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524289.394,data.sensor.Temp,20,BATT_2,25.7
1635524289.396,data.sensor.Temp,20,BATT_2_AUX,25.6
1635524289.397,data.sensor.Current,20,BATT_3_CHG,0.0
1635524289.398,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524289.399,data.sensor.Temp,20,BATT_3,25.7
1635524289.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524289.401,data.sensor.Temp,20,BATT_4,25.6
1635524289.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524289.403,data.sensor.Temp,20,BATT_5,25.4
1635524289.404,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524289.406,data.sensor.Current,20,BATT_4_CHG,-0.0
1635524289.407,data.sensor.Current,20,BATT_5_CHG,0.0
1635524289.408,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524289.409,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524289.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.2,3000.0,-0.1,0.0
1635524290.206,data.sensor.Current,23,DC_OUT,0.1
1635524290.207,data.sensor.Voltage,23,DC_IN,1.4
1635524290.208,data.sensor.Temp,23,PCBA,25.5
1635524290.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524290.243,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524290.244,data.sensor.Temp,23,BATT_1,25.5
1635524290.245,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524290.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524290.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524290.249,data.sensor.Temp,23,BATT_2,25.8
1635524290.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524290.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524290.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524290.253,data.sensor.Temp,23,BATT_3,25.7
1635524290.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524290.255,data.sensor.Temp,23,BATT_4,25.8
1635524290.256,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524290.257,data.sensor.Temp,23,BATT_5,25.5
1635524290.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524290.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524290.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524290.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524290.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524290.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524290.334,data.sensor.Current,20,DC_OUT,0.0
1635524290.335,data.sensor.Voltage,20,DC_IN,0.8
1635524290.336,data.sensor.Temp,20,PCBA,26.0
1635524290.388,data.sensor.Current,20,BATT_1_CHG,0.0
1635524290.389,data.sensor.Voltage,20,BATT_1_OUT,24.8
1635524290.390,data.sensor.Temp,20,BATT_1,25.6
1635524290.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524290.392,data.sensor.Current,20,BATT_2_CHG,0.0
1635524290.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524290.394,data.sensor.Temp,20,BATT_2,25.7
1635524290.395,data.sensor.Temp,20,BATT_2_AUX,25.6
1635524290.396,data.sensor.Current,20,BATT_3_CHG,-0.0
1635524290.397,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524290.399,data.sensor.Temp,20,BATT_3,25.6
1635524290.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524290.401,data.sensor.Temp,20,BATT_4,25.6
1635524290.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524290.403,data.sensor.Temp,20,BATT_5,25.3
1635524290.404,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524290.405,data.sensor.Current,20,BATT_4_CHG,-0.0
1635524290.406,data.sensor.Current,20,BATT_5_CHG,0.0
1635524290.407,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524290.408,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524290.409,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.1,3000.0,-0.1,0.0
1635524291.206,data.sensor.Current,23,DC_OUT,0.1
1635524291.207,data.sensor.Voltage,23,DC_IN,1.4
1635524291.208,data.sensor.Temp,23,PCBA,25.5
1635524291.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524291.243,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524291.244,data.sensor.Temp,23,BATT_1,25.5
1635524291.245,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524291.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524291.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524291.249,data.sensor.Temp,23,BATT_2,25.8
1635524291.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524291.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524291.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524291.253,data.sensor.Temp,23,BATT_3,25.7
1635524291.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524291.255,data.sensor.Temp,23,BATT_4,25.8
1635524291.256,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524291.258,data.sensor.Temp,23,BATT_5,25.5
1635524291.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524291.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524291.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524291.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524291.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524291.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524291.334,data.sensor.Current,20,DC_OUT,0.0
1635524291.335,data.sensor.Voltage,20,DC_IN,0.8
1635524291.336,data.sensor.Temp,20,PCBA,26.0
1635524291.388,data.sensor.Current,20,BATT_1_CHG,-0.0
1635524291.389,data.sensor.Voltage,20,BATT_1_OUT,24.7
1635524291.390,data.sensor.Temp,20,BATT_1,25.6
1635524291.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524291.392,data.sensor.Current,20,BATT_2_CHG,0.0
1635524291.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524291.394,data.sensor.Temp,20,BATT_2,25.7
1635524291.395,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524291.396,data.sensor.Current,20,BATT_3_CHG,-0.0
1635524291.397,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524291.399,data.sensor.Temp,20,BATT_3,25.6
1635524291.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524291.401,data.sensor.Temp,20,BATT_4,25.6
1635524291.402,data.sensor.Temp,20,BATT_4_AUX,25.5
1635524291.403,data.sensor.Temp,20,BATT_5,25.4
1635524291.404,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524291.405,data.sensor.Current,20,BATT_4_CHG,0.0
1635524291.406,data.sensor.Current,20,BATT_5_CHG,0.0
1635524291.407,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524291.408,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524291.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.1,3000.0,-0.1,0.0
1635524292.206,data.sensor.Current,23,DC_OUT,0.1
1635524292.207,data.sensor.Voltage,23,DC_IN,1.4
1635524292.208,data.sensor.Temp,23,PCBA,25.5
1635524292.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524292.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524292.245,data.sensor.Temp,23,BATT_1,25.5
1635524292.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524292.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524292.248,data.sensor.Voltage,23,BATT_2_OUT,25.8
1635524292.249,data.sensor.Temp,23,BATT_2,25.8
1635524292.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524292.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524292.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524292.253,data.sensor.Temp,23,BATT_3,25.7
1635524292.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524292.256,data.sensor.Temp,23,BATT_4,25.8
1635524292.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524292.258,data.sensor.Temp,23,BATT_5,25.5
1635524292.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524292.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524292.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524292.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524292.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524292.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524292.334,data.sensor.Current,20,DC_OUT,0.0
1635524292.336,data.sensor.Voltage,20,DC_IN,0.8
1635524292.337,data.sensor.Temp,20,PCBA,26.0
1635524292.388,data.sensor.Current,20,BATT_1_CHG,0.0
1635524292.389,data.sensor.Voltage,20,BATT_1_OUT,24.8
1635524292.390,data.sensor.Temp,20,BATT_1,25.6
1635524292.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524292.392,data.sensor.Current,20,BATT_2_CHG,0.0
1635524292.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524292.395,data.sensor.Temp,20,BATT_2,25.7
1635524292.396,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524292.397,data.sensor.Current,20,BATT_3_CHG,0.0
1635524292.398,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524292.399,data.sensor.Temp,20,BATT_3,25.7
1635524292.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524292.401,data.sensor.Temp,20,BATT_4,25.6
1635524292.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524292.403,data.sensor.Temp,20,BATT_5,25.4
1635524292.405,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524292.406,data.sensor.Current,20,BATT_4_CHG,0.0
1635524292.407,data.sensor.Current,20,BATT_5_CHG,0.0
1635524292.408,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524292.409,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524292.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.2,3000.0,-0.1,0.0
1635524293.206,data.sensor.Current,23,DC_OUT,0.1
1635524293.207,data.sensor.Voltage,23,DC_IN,1.4
1635524293.208,data.sensor.Temp,23,PCBA,25.5
1635524293.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524293.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524293.245,data.sensor.Temp,23,BATT_1,25.5
1635524293.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524293.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524293.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524293.249,data.sensor.Temp,23,BATT_2,25.8
1635524293.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524293.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524293.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524293.253,data.sensor.Temp,23,BATT_3,25.7
1635524293.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524293.256,data.sensor.Temp,23,BATT_4,25.8
1635524293.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524293.258,data.sensor.Temp,23,BATT_5,25.5
1635524293.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524293.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524293.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524293.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524293.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524293.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524293.334,data.sensor.Current,20,DC_OUT,0.0
1635524293.336,data.sensor.Voltage,20,DC_IN,0.7
1635524293.337,data.sensor.Temp,20,PCBA,26.0
1635524293.388,data.sensor.Current,20,BATT_1_CHG,0.0
1635524293.389,data.sensor.Voltage,20,BATT_1_OUT,24.8
1635524293.390,data.sensor.Temp,20,BATT_1,25.6
1635524293.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524293.392,data.sensor.Current,20,BATT_2_CHG,0.0
1635524293.393,data.sensor.Voltage,20,BATT_2_OUT,24.9
1635524293.394,data.sensor.Temp,20,BATT_2,25.7
1635524293.395,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524293.397,data.sensor.Current,20,BATT_3_CHG,-0.0
1635524293.398,data.sensor.Voltage,20,BATT_3_OUT,24.8
1635524293.399,data.sensor.Temp,20,BATT_3,25.7
1635524293.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524293.401,data.sensor.Temp,20,BATT_4,25.6
1635524293.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524293.403,data.sensor.Temp,20,BATT_5,25.4
1635524293.404,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524293.405,data.sensor.Current,20,BATT_4_CHG,0.0
1635524293.406,data.sensor.Current,20,BATT_5_CHG,0.0
1635524293.408,data.sensor.Voltage,20,BATT_4_OUT,24.8
1635524293.409,data.sensor.Voltage,20,BATT_5_OUT,24.9
1635524293.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,0.2,3000.0,-0.1,0.0
1635524294.206,data.sensor.Current,23,DC_OUT,0.1
1635524294.207,data.sensor.Voltage,23,DC_IN,1.4
1635524294.208,data.sensor.Temp,23,PCBA,25.5
1635524294.242,data.sensor.Current,23,BATT_1_CHG,0.0
1635524294.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524294.245,data.sensor.Temp,23,BATT_1,25.5
1635524294.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524294.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524294.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524294.249,data.sensor.Temp,23,BATT_2,25.8
1635524294.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524294.251,data.sensor.Current,23,BATT_3_CHG,-0.0
1635524294.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524294.253,data.sensor.Temp,23,BATT_3,25.7
1635524294.254,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524294.256,data.sensor.Temp,23,BATT_4,25.8
1635524294.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524294.258,data.sensor.Temp,23,BATT_5,25.5
1635524294.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524294.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524294.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524294.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524294.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524294.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524294.335,data.sensor.Current,20,DC_OUT,0.9
1635524294.336,data.sensor.Voltage,20,DC_IN,0.8
1635524294.337,data.sensor.Temp,20,PCBA,25.8
1635524294.388,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524294.389,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524294.390,data.sensor.Temp,20,BATT_1,25.6
1635524294.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524294.392,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524294.393,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524294.394,data.sensor.Temp,20,BATT_2,25.7
1635524294.395,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524294.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524294.398,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524294.399,data.sensor.Temp,20,BATT_3,25.7
1635524294.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524294.401,data.sensor.Temp,20,BATT_4,25.6
1635524294.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524294.403,data.sensor.Temp,20,BATT_5,25.3
1635524294.404,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524294.405,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524294.406,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524294.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524294.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524294.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,2.5,3000.0,-0.1,0.0
1635524295.206,data.sensor.Current,23,DC_OUT,0.1
1635524295.207,data.sensor.Voltage,23,DC_IN,1.4
1635524295.208,data.sensor.Temp,23,PCBA,25.5
1635524295.243,data.SetChargePower.Request,23,4,25.5,0.2
1635524295.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524295.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524295.245,data.sensor.Temp,23,BATT_1,25.5
1635524295.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524295.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524295.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524295.249,data.sensor.Temp,23,BATT_2,25.8
1635524295.251,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524295.252,data.sensor.Current,23,BATT_3_CHG,0.0
1635524295.253,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524295.254,data.sensor.Temp,23,BATT_3,25.7
1635524295.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524295.256,data.sensor.Temp,23,BATT_4,25.8
1635524295.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524295.258,data.sensor.Temp,23,BATT_5,25.5
1635524295.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524295.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524295.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524295.263,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524295.264,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524295.265,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524295.335,data.sensor.Current,20,DC_OUT,0.9
1635524295.336,data.sensor.Voltage,20,DC_IN,0.7
1635524295.337,data.sensor.Temp,20,PCBA,26.0
1635524295.388,data.SetChargePower.Request,20,4,24.8,1.0
1635524295.388,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524295.389,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524295.390,data.sensor.Temp,20,BATT_1,25.6
1635524295.392,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524295.393,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524295.394,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524295.395,data.sensor.Temp,20,BATT_2,25.7
1635524295.396,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524295.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524295.398,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524295.399,data.sensor.Temp,20,BATT_3,25.6
1635524295.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524295.401,data.sensor.Temp,20,BATT_4,25.6
1635524295.403,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524295.404,data.sensor.Temp,20,BATT_5,25.4
1635524295.405,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524295.406,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524295.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524295.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524295.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524295.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,4.8,3000.0,-0.1,0.0
1635524296.206,data.sensor.Current,23,DC_OUT,0.1
1635524296.207,data.sensor.Voltage,23,DC_IN,1.4
1635524296.208,data.sensor.Temp,23,PCBA,25.5
1635524296.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524296.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524296.245,data.sensor.Temp,23,BATT_1,25.5
1635524296.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524296.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524296.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524296.249,data.sensor.Temp,23,BATT_2,25.8
1635524296.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524296.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524296.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524296.254,data.sensor.Temp,23,BATT_3,25.7
1635524296.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524296.256,data.sensor.Temp,23,BATT_4,25.8
1635524296.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524296.258,data.sensor.Temp,23,BATT_5,25.5
1635524296.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524296.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524296.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524296.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524296.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524296.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524296.335,data.sensor.Current,20,DC_OUT,0.9
1635524296.336,data.sensor.Voltage,20,DC_IN,0.8
1635524296.337,data.sensor.Temp,20,PCBA,26.0
1635524296.388,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524296.389,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524296.390,data.sensor.Temp,20,BATT_1,25.6
1635524296.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524296.392,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524296.393,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524296.394,data.sensor.Temp,20,BATT_2,25.7
1635524296.396,data.sensor.Temp,20,BATT_2_AUX,25.6
1635524296.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524296.398,data.sensor.Voltage,20,BATT_3_OUT,24.7
1635524296.399,data.sensor.Temp,20,BATT_3,25.7
1635524296.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524296.401,data.sensor.Temp,20,BATT_4,25.6
1635524296.402,data.sensor.Temp,20,BATT_4_AUX,25.5
1635524296.403,data.sensor.Temp,20,BATT_5,25.4
1635524296.404,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524296.405,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524296.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524296.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524296.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524296.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,7.1,3000.0,-0.1,0.0
1635524297.206,data.sensor.Current,23,DC_OUT,0.1
1635524297.207,data.sensor.Voltage,23,DC_IN,1.4
1635524297.208,data.sensor.Temp,23,PCBA,25.5
1635524297.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524297.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524297.245,data.sensor.Temp,23,BATT_1,25.5
1635524297.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524297.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524297.248,data.sensor.Voltage,23,BATT_2_OUT,25.8
1635524297.249,data.sensor.Temp,23,BATT_2,25.8
1635524297.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524297.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524297.252,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524297.254,data.sensor.Temp,23,BATT_3,25.7
1635524297.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524297.256,data.sensor.Temp,23,BATT_4,25.8
1635524297.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524297.258,data.sensor.Temp,23,BATT_5,25.5
1635524297.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524297.260,data.sensor.Current,23,BATT_4_CHG,-0.0
1635524297.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524297.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524297.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524297.264,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524297.335,data.sensor.Current,20,DC_OUT,0.9
1635524297.336,data.sensor.Voltage,20,DC_IN,0.8
1635524297.337,data.sensor.Temp,20,PCBA,25.8
1635524297.388,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524297.389,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524297.390,data.sensor.Temp,20,BATT_1,25.6
1635524297.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524297.392,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524297.393,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524297.395,data.sensor.Temp,20,BATT_2,25.7
1635524297.396,data.sensor.Temp,20,BATT_2_AUX,25.6
1635524297.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524297.398,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524297.399,data.sensor.Temp,20,BATT_3,25.6
1635524297.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524297.401,data.sensor.Temp,20,BATT_4,25.6
1635524297.402,data.sensor.Temp,20,BATT_4_AUX,25.5
1635524297.403,data.sensor.Temp,20,BATT_5,25.4
1635524297.404,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524297.405,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524297.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524297.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524297.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524297.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,9.4,3000.0,-0.1,0.0
1635524298.206,data.sensor.Current,23,DC_OUT,0.1
1635524298.207,data.sensor.Voltage,23,DC_IN,1.4
1635524298.209,data.sensor.Temp,23,PCBA,25.5
1635524298.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524298.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524298.245,data.sensor.Temp,23,BATT_1,25.5
1635524298.246,data.sensor.Temp,23,BATT_1_AUX,25.4
1635524298.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524298.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524298.250,data.sensor.Temp,23,BATT_2,25.8
1635524298.251,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524298.252,data.sensor.Current,23,BATT_3_CHG,-0.0
1635524298.253,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524298.254,data.sensor.Temp,23,BATT_3,25.7
1635524298.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524298.256,data.sensor.Temp,23,BATT_4,25.8
1635524298.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524298.258,data.sensor.Temp,23,BATT_5,25.5
1635524298.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524298.260,data.sensor.Current,23,BATT_4_CHG,-0.0
1635524298.262,data.sensor.Current,23,BATT_5_CHG,0.0
1635524298.263,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524298.264,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524298.265,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524298.335,data.sensor.Current,20,DC_OUT,0.9
1635524298.336,data.sensor.Voltage,20,DC_IN,0.8
1635524298.337,data.sensor.Temp,20,PCBA,25.8
1635524298.388,data.SetChargePower.Request,20,4,24.9,1.1
1635524298.389,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524298.390,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524298.391,data.sensor.Temp,20,BATT_1,25.6
1635524298.392,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524298.393,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524298.394,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524298.395,data.sensor.Temp,20,BATT_2,25.7
1635524298.396,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524298.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524298.398,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524298.399,data.sensor.Temp,20,BATT_3,25.7
1635524298.401,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524298.402,data.sensor.Temp,20,BATT_4,25.6
1635524298.403,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524298.404,data.sensor.Temp,20,BATT_5,25.4
1635524298.405,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524298.406,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524298.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524298.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524298.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524298.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,11.8,3000.0,-0.1,0.0
1635524299.206,data.sensor.Current,23,DC_OUT,0.1
1635524299.208,data.sensor.Voltage,23,DC_IN,1.4
1635524299.209,data.sensor.Temp,23,PCBA,25.5
1635524299.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524299.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524299.245,data.sensor.Temp,23,BATT_1,25.5
1635524299.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524299.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524299.248,data.sensor.Voltage,23,BATT_2_OUT,25.8
1635524299.249,data.sensor.Temp,23,BATT_2,25.8
1635524299.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524299.251,data.sensor.Current,23,BATT_3_CHG,-0.0
1635524299.253,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524299.254,data.sensor.Temp,23,BATT_3,25.7
1635524299.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524299.256,data.sensor.Temp,23,BATT_4,25.8
1635524299.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524299.258,data.sensor.Temp,23,BATT_5,25.5
1635524299.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524299.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524299.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524299.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524299.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524299.265,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524299.335,data.sensor.Current,20,DC_OUT,0.9
1635524299.336,data.sensor.Voltage,20,DC_IN,0.8
1635524299.337,data.sensor.Temp,20,PCBA,26.0
1635524299.388,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524299.389,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524299.390,data.sensor.Temp,20,BATT_1,25.6
1635524299.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524299.392,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524299.393,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524299.395,data.sensor.Temp,20,BATT_2,25.7
1635524299.396,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524299.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524299.398,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524299.399,data.sensor.Temp,20,BATT_3,25.6
1635524299.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524299.401,data.sensor.Temp,20,BATT_4,25.6
1635524299.402,data.sensor.Temp,20,BATT_4_AUX,25.5
1635524299.403,data.sensor.Temp,20,BATT_5,25.4
1635524299.404,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524299.406,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524299.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524299.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524299.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524299.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,14.1,3000.0,-0.1,0.0
1635524300.207,data.sensor.Current,23,DC_OUT,0.1
1635524300.208,data.sensor.Voltage,23,DC_IN,1.4
1635524300.209,data.sensor.Temp,23,PCBA,25.5
1635524300.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524300.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524300.245,data.sensor.Temp,23,BATT_1,25.5
1635524300.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524300.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524300.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524300.249,data.sensor.Temp,23,BATT_2,25.8
1635524300.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524300.251,data.sensor.Current,23,BATT_3_CHG,0.0
1635524300.253,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524300.254,data.sensor.Temp,23,BATT_3,25.7
1635524300.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524300.256,data.sensor.Temp,23,BATT_4,25.8
1635524300.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524300.258,data.sensor.Temp,23,BATT_5,25.5
1635524300.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524300.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524300.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524300.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524300.263,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524300.265,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524300.335,data.sensor.Current,20,DC_OUT,1.0
1635524300.336,data.sensor.Voltage,20,DC_IN,0.7
1635524300.337,data.sensor.Temp,20,PCBA,26.0
1635524300.388,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524300.389,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524300.390,data.sensor.Temp,20,BATT_1,25.6
1635524300.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524300.392,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524300.394,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524300.395,data.sensor.Temp,20,BATT_2,25.7
1635524300.396,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524300.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524300.398,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524300.399,data.sensor.Temp,20,BATT_3,25.6
1635524300.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524300.401,data.sensor.Temp,20,BATT_4,25.6
1635524300.402,data.sensor.Temp,20,BATT_4_AUX,25.5
1635524300.403,data.sensor.Temp,20,BATT_5,25.3
1635524300.404,data.sensor.Temp,20,BATT_5_AUX,25.4
1635524300.406,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524300.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524300.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524300.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524300.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,16.5,3000.0,-0.1,0.0
1635524301.207,data.sensor.Current,23,DC_OUT,0.1
1635524301.208,data.sensor.Voltage,23,DC_IN,1.4
1635524301.209,data.sensor.Temp,23,PCBA,25.5
1635524301.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524301.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524301.245,data.sensor.Temp,23,BATT_1,25.5
1635524301.246,data.sensor.Temp,23,BATT_1_AUX,25.4
1635524301.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524301.248,data.sensor.Voltage,23,BATT_2_OUT,25.7
1635524301.250,data.sensor.Temp,23,BATT_2,25.8
1635524301.251,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524301.252,data.sensor.Current,23,BATT_3_CHG,0.0
1635524301.253,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524301.254,data.sensor.Temp,23,BATT_3,25.7
1635524301.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524301.256,data.sensor.Temp,23,BATT_4,25.8
1635524301.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524301.258,data.sensor.Temp,23,BATT_5,25.5
1635524301.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524301.261,data.sensor.Current,23,BATT_4_CHG,0.0
1635524301.262,data.sensor.Current,23,BATT_5_CHG,0.0
1635524301.263,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524301.264,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524301.265,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524301.335,data.sensor.Current,20,DC_OUT,0.9
1635524301.336,data.sensor.Voltage,20,DC_IN,0.8
1635524301.337,data.sensor.Temp,20,PCBA,26.0
1635524301.389,data.SetChargePower.Request,20,4,24.9,1.1
1635524301.389,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524301.390,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524301.391,data.sensor.Temp,20,BATT_1,25.6
1635524301.392,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524301.393,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524301.394,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524301.395,data.sensor.Temp,20,BATT_2,25.7
1635524301.396,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524301.398,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524301.399,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524301.400,data.sensor.Temp,20,BATT_3,25.7
1635524301.401,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524301.402,data.sensor.Temp,20,BATT_4,25.6
1635524301.403,data.sensor.Temp,20,BATT_4_AUX,25.5
1635524301.404,data.sensor.Temp,20,BATT_5,25.3
1635524301.405,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524301.406,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524301.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524301.409,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524301.410,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524301.411,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,18.8,3000.0,-0.2,0.0
1635524302.207,data.sensor.Current,23,DC_OUT,0.1
1635524302.208,data.sensor.Voltage,23,DC_IN,1.4
1635524302.209,data.sensor.Temp,23,PCBA,25.5
1635524302.243,data.sensor.Current,23,BATT_1_CHG,0.0
1635524302.244,data.sensor.Voltage,23,BATT_1_OUT,25.6
1635524302.245,data.sensor.Temp,23,BATT_1,25.5
1635524302.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524302.247,data.sensor.Current,23,BATT_2_CHG,0.0
1635524302.248,data.sensor.Voltage,23,BATT_2_OUT,25.8
1635524302.249,data.sensor.Temp,23,BATT_2,25.8
1635524302.250,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524302.252,data.sensor.Current,23,BATT_3_CHG,0.0
1635524302.253,data.sensor.Voltage,23,BATT_3_OUT,25.6
1635524302.254,data.sensor.Temp,23,BATT_3,25.7
1635524302.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524302.256,data.sensor.Temp,23,BATT_4,25.8
1635524302.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524302.258,data.sensor.Temp,23,BATT_5,25.5
1635524302.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524302.260,data.sensor.Current,23,BATT_4_CHG,0.0
1635524302.261,data.sensor.Current,23,BATT_5_CHG,0.0
1635524302.262,data.sensor.Voltage,23,BATT_4_OUT,25.7
1635524302.264,data.sensor.Voltage,23,BATT_5_OUT,25.7
1635524302.265,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,1.9,3000.0,0.3,0.0
1635524302.335,data.sensor.Current,20,DC_OUT,0.9
1635524302.336,data.sensor.Voltage,20,DC_IN,0.8
1635524302.337,data.sensor.Temp,20,PCBA,25.8
1635524302.388,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524302.389,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524302.390,data.sensor.Temp,20,BATT_1,25.6
1635524302.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524302.393,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524302.394,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524302.395,data.sensor.Temp,20,BATT_2,25.7
1635524302.396,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524302.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524302.398,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524302.399,data.sensor.Temp,20,BATT_3,25.6
1635524302.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524302.401,data.sensor.Temp,20,BATT_4,25.6
1635524302.402,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524302.403,data.sensor.Temp,20,BATT_5,25.4
1635524302.405,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524302.406,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524302.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524302.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524302.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524302.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,21.1,3000.0,-0.2,0.0
1635524303.207,data.sensor.Current,23,DC_OUT,1.1
1635524303.208,data.sensor.Voltage,23,DC_IN,1.4
1635524303.209,data.sensor.Temp,23,PCBA,25.5
1635524303.243,data.sensor.Current,23,BATT_1_CHG,-0.2
1635524303.244,data.sensor.Voltage,23,BATT_1_OUT,25.5
1635524303.245,data.sensor.Temp,23,BATT_1,25.5
1635524303.246,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524303.247,data.sensor.Current,23,BATT_2_CHG,-0.2
1635524303.248,data.sensor.Voltage,23,BATT_2_OUT,25.6
1635524303.249,data.sensor.Temp,23,BATT_2,25.8
1635524303.251,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524303.252,data.sensor.Current,23,BATT_3_CHG,-0.2
1635524303.253,data.sensor.Voltage,23,BATT_3_OUT,25.5
1635524303.254,data.sensor.Temp,23,BATT_3,25.7
1635524303.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524303.256,data.sensor.Temp,23,BATT_4,25.8
1635524303.257,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524303.258,data.sensor.Temp,23,BATT_5,25.5
1635524303.259,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524303.260,data.sensor.Current,23,BATT_4_CHG,-0.2
1635524303.261,data.sensor.Current,23,BATT_5_CHG,-0.2
1635524303.262,data.sensor.Voltage,23,BATT_4_OUT,25.5
1635524303.264,data.sensor.Voltage,23,BATT_5_OUT,25.6
1635524303.265,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,4.5,3000.0,0.3,0.0
1635524303.335,data.sensor.Current,20,DC_OUT,0.9
1635524303.336,data.sensor.Voltage,20,DC_IN,0.8
1635524303.337,data.sensor.Temp,20,PCBA,26.0
1635524303.388,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524303.389,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524303.390,data.sensor.Temp,20,BATT_1,25.6
1635524303.391,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524303.393,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524303.394,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524303.395,data.sensor.Temp,20,BATT_2,25.7
1635524303.396,data.sensor.Temp,20,BATT_2_AUX,25.5
1635524303.397,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524303.398,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524303.399,data.sensor.Temp,20,BATT_3,25.6
1635524303.400,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524303.401,data.sensor.Temp,20,BATT_4,25.6
1635524303.403,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524303.404,data.sensor.Temp,20,BATT_5,25.4
1635524303.405,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524303.406,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524303.407,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524303.408,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524303.409,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524303.410,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,21.1,3000.0,-0.2,0.0
1635524304.207,data.sensor.Current,23,DC_OUT,1.1
1635524304.208,data.sensor.Voltage,23,DC_IN,1.4
1635524304.209,data.sensor.Temp,23,PCBA,25.5
1635524304.243,data.SetChargePower.Request,23,4,25.6,1.2
1635524304.243,data.sensor.Current,23,BATT_1_CHG,-0.2
1635524304.244,data.sensor.Voltage,23,BATT_1_OUT,25.5
1635524304.246,data.sensor.Temp,23,BATT_1,25.5
1635524304.247,data.sensor.Temp,23,BATT_1_AUX,25.5
1635524304.248,data.sensor.Current,23,BATT_2_CHG,-0.2
1635524304.249,data.sensor.Voltage,23,BATT_2_OUT,25.6
1635524304.250,data.sensor.Temp,23,BATT_2,25.8
1635524304.251,data.sensor.Temp,23,BATT_2_AUX,25.8
1635524304.252,data.sensor.Current,23,BATT_3_CHG,-0.2
1635524304.253,data.sensor.Voltage,23,BATT_3_OUT,25.5
1635524304.254,data.sensor.Temp,23,BATT_3,25.7
1635524304.255,data.sensor.Temp,23,BATT_3_AUX,25.6
1635524304.256,data.sensor.Temp,23,BATT_4,25.8
1635524304.258,data.sensor.Temp,23,BATT_4_AUX,25.8
1635524304.259,data.sensor.Temp,23,BATT_5,25.5
1635524304.260,data.sensor.Temp,23,BATT_5_AUX,25.4
1635524304.261,data.sensor.Current,23,BATT_4_CHG,-0.2
1635524304.262,data.sensor.Current,23,BATT_5_CHG,-0.2
1635524304.263,data.sensor.Voltage,23,BATT_4_OUT,25.5
1635524304.264,data.sensor.Voltage,23,BATT_5_OUT,25.6
1635524304.265,data.status,23,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,7.1,3000.0,0.3,0.0
1635524304.335,data.sensor.Current,20,DC_OUT,0.9
1635524304.336,data.sensor.Voltage,20,DC_IN,0.8
1635524304.337,data.sensor.Temp,20,PCBA,26.0
1635524304.389,data.SetChargePower.Request,20,4,25.0,1.0
1635524304.389,data.sensor.Current,20,BATT_1_CHG,-0.2
1635524304.390,data.sensor.Voltage,20,BATT_1_OUT,24.6
1635524304.391,data.sensor.Temp,20,BATT_1,25.6
1635524304.392,data.sensor.Temp,20,BATT_1_AUX,25.6
1635524304.393,data.sensor.Current,20,BATT_2_CHG,-0.2
1635524304.395,data.sensor.Voltage,20,BATT_2_OUT,24.8
1635524304.396,data.sensor.Temp,20,BATT_2,25.7
1635524304.397,data.sensor.Temp,20,BATT_2_AUX,25.6
1635524304.398,data.sensor.Current,20,BATT_3_CHG,-0.2
1635524304.399,data.sensor.Voltage,20,BATT_3_OUT,24.6
1635524304.400,data.sensor.Temp,20,BATT_3,25.7
1635524304.401,data.sensor.Temp,20,BATT_3_AUX,25.6
1635524304.402,data.sensor.Temp,20,BATT_4,25.6
1635524304.403,data.sensor.Temp,20,BATT_4_AUX,25.6
1635524304.405,data.sensor.Temp,20,BATT_5,25.3
1635524304.406,data.sensor.Temp,20,BATT_5_AUX,25.3
1635524304.407,data.sensor.Current,20,BATT_4_CHG,-0.2
1635524304.408,data.sensor.Current,20,BATT_5_CHG,-0.2
1635524304.409,data.sensor.Voltage,20,BATT_4_OUT,24.7
1635524304.410,data.sensor.Voltage,20,BATT_5_OUT,24.8
1635524304.411,data.status,20,NORMAL,0,False,False,False,False,False,False,False,True,True,True,True,True,False,255,0,21.1,3000.0,-0.2,0.0
1635524305.207,data.sensor.Current,23,DC_OUT,1.1
[/quote]
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av Maalobs »

I ditt indata har du som exempel i kolumn två: data.sensor.Current
I ditt utdata har du som exempel i kolumn två: data,sensor,Current
Ville du verkligen att punkt ska bytas ut till komma där?

Vad är det du vill åstadkomma med kolumn två och tre?
Stämmer min spekulation jag skrev tidigare?
Eller vill du att utdatat ska vara sorterat på en kombinerad textsträng av kolumn två och tre, t ex: data.sensor.Current,23
Förklara det tydligare. :)

Du säger att ca 50 enskilda utdata-filer ska skapas; är varje enskild, unik textsträng som är kriteriet för separationen av utdata till vardera fil, känd?
Jag kan ge dig en kommandorad som plockar ut varenda unik textsträng ur din jättefil åt dig, om du förklarar vad textsträngen är i ditt otvättade indata.

En metod jag använder ganska mycket är att inte lägga ner onödigt med tid på en avancerad logik på kortvariga snurror, istället använder jag scriptning för att producera ett slutgiltigt script som sedan körs så länge den behövs.
En sorts loop unrolling, där det slutgiltiga scriptet eller batfilen blir en lång kommandolista som blev enkel och snabb att skapa med några oneliners i Perl.
Det är lagom för engångsgrejer eller sådant som bara behöver köras en kort period, vilket låter som det du vill göra.
guckrum
Inlägg: 1669
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: awk formatera flyttal

Inlägg av guckrum »

Vem kommer på 2021 att man ska göra något med awk såvida man inte är entusiast i datorhistoria. :D
awk, sed, tr, sort, grep, uniq, comm etc är fortfarande fantastiska verktyg när det gäller snabb dataprocessing av stora dataset. Jag använder dem dagligen. De är så otroligt väldesignade och härligt buggfria. Och snabba. Och minnessnåla. 8)
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av hummel »

Maalobs skrev: 20 december 2021, 18:24:58 I ditt indata har du som exempel i kolumn två: data.sensor.Current
I ditt utdata har du som exempel i kolumn två: data,sensor,Current
Ville du verkligen att punkt ska bytas ut till komma där?
Det gick för fort med search & replace i beskrivningen. se bild nedan.
Vad är det du vill åstadkomma med kolumn två och tre?
Bild
Gul - Tidsstämpel, sekunder med 1/1000 sekund upplösning
Orange - Sensortyp, specificerad som bla temperatur, spänning och ström
Grön - CAN-adress, avsändarens adress
Röd - Sensornamn, sensorn namn. Vad gäller BATT_xxx så har exvis vissa CAN-adresser 5 batterier med 2 olika tempsensorer alltså totalt 10 tempsensorer
Blå - Sensordata, i relevant enhet beroende på sensor som A, V, °C osv
Eller vill du att utdatat ska vara sorterat på en kombinerad textsträng av kolumn två och tre, t ex: data.sensor.Current,23
Förklara det tydligare. :)

Du säger att ca 50 enskilda utdata-filer ska skapas; är varje enskild, unik textsträng som är kriteriet för separationen av utdata till vardera fil, känd?
Utfilen ska sorteras baserat på CAN-adress+Sensortyp+sensornamn. Namn kan vara exvis BATT_1, BATT_1_AUX, BATT_5, PCBA, DC_OUT, DC_IN, BATT_3_CHG osv
Jag kan ge dig en kommandorad som plockar ut varenda unik textsträng ur din jättefil åt dig, om du förklarar vad textsträngen är i ditt otvättade indata.

En metod jag använder ganska mycket är att inte lägga ner onödigt med tid på en avancerad logik på kortvariga snurror, istället använder jag scriptning för att producera ett slutgiltigt script som sedan körs så länge den behövs.
En sorts loop unrolling, där det slutgiltiga scriptet eller batfilen blir en lång kommandolista som blev enkel och snabb att skapa med några oneliners i Perl.
Det är lagom för engångsgrejer eller sådant som bara behöver köras en kort period, vilket låter som det du vill göra.
Jag uppskattar all hjälp jag kan få.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av Maalobs »

Det finns inga mellanslag i ditt faktiska indata så det var meningslöst att bearbeta det.
Skriv aldrig av data eller kod, kopiera det as-is.

Om jag sparar ditt råa indata till infil_org.txt, så räcker det att köra det här för att byta post-separatorer till semikolon och rätt punkter till komma:

Kod: Markera allt

cat infil_org.txt | perl -wpe 'y/,/;/;s/(\d)\.(\d)/$1,$2/g'
1635524284,206;data.sensor.Current;23;DC_OUT;0,1
1635524284,207;data.sensor.Voltage;23;DC_IN;1,4
1635524284,208;data.sensor.Temp;23;PCBA;25,5
1635524284,242;data.sensor.Current;23;BATT_1_CHG;0,0
^C
Det är en massa CAN-data, men jag förstår fortfarande inte hur du vill sortera, du har inte svarat på någon av de direkta frågorna gällande det.
Nu pratar du om kolumn två, tre och fyra. :wacko:
Vill du använda den kombinerade textsträngen "CAN-adress;Sensortyp;Sensornamn" som sorteringskriterium?
Om ja, då kan du köra det här på din faktiska indata-fil, och utdata-filen kommer då att vara sorterad på den ovanstående substringen av varje data-rad:

Kod: Markera allt

cat infil_org.txt | perl -wpe 'y/,/;/;s/(\d)\.(\d)/$1,$2/g' | perl -wne 'print "$1\t$_" if (m/^[^;]+;([^;]+;[^;]+;[^;]+);/)' | sort -t \t -k1 | perl -wpe "s/^\S+\t//" > utfil.txt
Spara substringarna till en egen lista så att du kan inspektera dem för att se om de verkar rimliga till utseende och antal:

Kod: Markera allt

cat infil_org.txt | perl -wpe 'y/,/;/;s/(\d)\.(\d)/$1,$2/g' | perl -wnle 'print $1 if (m/^[^;]+;([^;]+;[^;]+;[^;]+);/)' | sort | uniq > CAN_IDs.txt
Om det ser vettigt ut, då kan du använda den listan för att scripta skapandet av ett annat script som du sedan kör på din utdata-fil för att producera de individuella data-filerna:

Kod: Markera allt

perl -wnle 'chomp; print qq(grep -F "$_" utfil.txt > $..txt)' CAN_IDs.txt
Jag får 51 enskilda data-filer från det där om jag kör grep-kommandona på ditt råa indata, med prydligt sorterat innehåll i var och en.
Det är dock bara spekulation om det här är vad du ville åstadkomma. :D
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av Maalobs »

Förresten, du får sådana här exempel på rader i CAN_IDs.txt:

Kod: Markera allt

data.sensor.Temp;20;BATT_1
data.sensor.Temp;20;BATT_1_AUX
Då blir det ju självklart dubletter när man kör grep på första raden, så sök-kriteriet måste utökas så att den tar med det efterföljande semikolonet in i $1 också.
Jag tror inte du behöver hålla på och sortera indata-filen först, det var mest som ett mellansteg för att se att man får data som ser rimligt ut, så den biten kan tas bort.
Man kan formattera namnet på de enskilda data-filerna med printf() och %02d så att de alla sorterar korrekt alfabetiskt också, namnet är ju bara loopens iterationsnummer med .txt på slutet.
Dessutom kan vi använda lite mer konsekvent vänster-till-höger flöde på alla kommandoraderna.

Så här:

Kod: Markera allt

cat infil_org.txt | perl -wpe 'y/,/;/;s/(\d)\.(\d)/$1,$2/g' | perl -wnle 'print $1 if (m/^[^;]+;([^;]+;[^;]+;[^;]+;)/)' | sort | uniq > CAN_IDs.txt
cat CAN_IDs.txt | perl -wne 'chomp; printf(qq(grep -F "%s" utfil.txt > %02d.txt\n),$_,$.)' > collect_data.sh
source collect_data.sh
Varje enskild data-fil på slutet är ju fortfarande kronologiskt sorterad, och innehåller bara raderna med filens sök-kriteria. :)
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av Maalobs »

Gick lite för snabbt där, utdata-filen måste ju sparas eftersom den används med grep, så här blir bra:

Kod: Markera allt

cat infil_org.txt | perl -wpe 'y/,/;/;s/(\d)\.(\d)/$1,$2/g' > utfil.txt
cat utfil.txt | perl -wnle 'print $1 if (m/^[^;]+;([^;]+;[^;]+;[^;]+;)/)' | sort | uniq | perl -wne 'chomp;system(sprintf(qq(grep -F "%s" utfil.txt > %02d.txt),$_,$.))'
:D
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av hummel »

Här har jag legat i sängläge med någon form av influensa några dagar (Så trött att jag inte ens orkat testa Maalobs lösning).

Nu har jag testkört och konstaterat att det är imponerade snabbt jämfört med mina försök. Utdata ser korrekt ut men jag ska göra en noggrann kontroll.

Ett stort tack för engagemang så här långt!
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: awk formatera flyttal

Inlägg av Maalobs »

De två kommandoraderna i mitt förra inlägg är allt du behöver enligt din senaste beskrivning.

Den första kommandoraden förbehandlar logfilen genom att den fixar kravet att svenskt decimaltecken införs på poster som innehåller flyttal, och därför måste även postseparatorn ändras till semikolon som du önskade:
cat infil_org.txt | perl -wpe 'y/,/;/;s/(\d)\.(\d)/$1,$2/g' > utfil.txt
Vad som händer på den raden är att -p används som argument, det är en snabbfunktion för att kunna bilda kompakta oneliners med Perltolken som skapar ett beteende liknande det i sed, så tillvida att varje rad som matas in från STDIN även skrivs ut till STDOUT automatiskt, och ditt program ges möjlighet att behandla vardera input-rad innan utskriften.

Det åstadkoms genom att din programkod automatiskt wrappas in i en while-loop åt dig innan exekveringen:

Kod: Markera allt

 while (<>) {
		 ...             # your program goes here
 } continue {
		 print or die "-p destination: $!\n";
 }
Med <> som kallas "diamond-operator", läses data in per rad och varje rads innehåll fylls in automatiskt i variabeln $_, där radens radmatningstecken även ingår (alltså CR, LF eller CRLF).
Många kodfunktioner i Perl behandlar $_ automatiskt om inget annat anges, och det är vad som händer här.

I det här fallet anger vi vår programkod på kommandoraden med -e, och du kan skriva flera funktioner efter varann eftersom Perl har semikolon på slutet av varje rad precis som C.
Det är ett bra arbetssätt att alltid ange -w också så att Perl varnar dig om du gör potentiellt tvetydiga saker när du sysslar med implicita variabler som $_.

Konstruktionen y/// är detsamma som tr/// fast är kortare att skriva. :twisted:
Det är alltså en transliteration där exakt ett tecken ersätts med exakt ett annat tecken och det görs på varenda sådant tecken på indatat, och det går inte att finlira eftersom inga specialtecken fungerar, men det är snabbt och praktiskt.
Med y/,/;/ går man igenom $_ och letar upp varenda , och ersätter med ;.
Nu minns jag inte exakt hur det var, tror det nämndes i Brian Kernighans memoarer att y var kommandot för transliteration i en tidig arkaisk line editor, kanske ED?

Konstruktionen s/// är en regular expression substitution som behövde göras specifik på det här sättet eftersom det fanns . med i andra poster också, så det gick inte att använda en rak y/./,/ för det här, som annars skulle ha fångat upp även de oönskade punkterna.
I regular expressions är . ett wildcard som betyder "ett whatever-tecken", därför måste det escapas till \..
Parenteserna är specialtecken som används för att gruppera enskilda regex-mönster, och i det här fallet används symbolen \d i dem som betyder "ett siffertecken".
Varje öppnande parentes, (, skapar automatiskt en ny numrerad variabel, där den första parentesen heter $1, nästa heter $2, osv, och innehållet i parentesen hamnar i vardera variabel.
På det sättet kan vi i $_ leta upp mönstret "siffertecken punkt siffertecken" och ersätta med "det-första-ursprungliga-siffertecknet komma det-andra-ursprungliga-siffertecknet".
Standardbeteende med s/// är att bara första matchningen ändras, sedan läser man inte vidare på raden.
Det är någon sorts optimering som säkert var meningsfull på PDP-maskiner eller något, så vi ger den flaggan för Global på slutet med s///g vilket innebär att man fortsätter att söka efter mönstret tills att datat tar slut och därmed utför vi ändringen på alla matchningar på raden.

Efter att de båda kommandona har exekverats på innehållet i $_, så skrivs variabeln ut till STDOUT av continue-blocket i while-loopen som har wrappats runt vår kod, och varje rad från indata-filen behandlas så.


Den andra kommandoraden tar först ut varenda sorteringskriterium ur den nu förbehandlade utdatafilen och matar dem alla genom sort och uniq, ett vanligt arbetssätt för att hitta och skriva ut alla unika fall av ord i listor.
I det första Perl-kommandot händer det som är det intressanta:
perl -wnle 'print $1 if (m/^[^;]+;([^;]+;[^;]+;[^;]+;)/)'
Här använder vi -n istället för -p, och det får resultatet att vår programkod wrappas i en sån här while-loop:

Kod: Markera allt

while (<>) {
	 ...             # your program goes here
}
Skillnaden här är att ingen automatisk print() sker, men annars används diamond-operatorn så allt fungerar som tidigare med att varje rad från STDIN hamnar i $_.
En annan sak på kommandoraden är att -l är med; det gör att ett \n läggs till automatiskt på slutet på varje print-kommando, och det är radmatningen som är lokal för det system som Perltolken just nu körs på, så man behöver inte fundera på vad det ska vara.

Om vi tittar på kodraden:
print $1 if (m/^[^;]+;([^;]+;[^;]+;[^;]+;)/)
Det är en ytterligare optimering för oneliners, och är detsamma som:

Kod: Markera allt

if (m/^[^;]+;([^;]+;[^;]+;[^;]+;)/) {
 print $1;
}
Konstruktionen m// är en regular expression match, och även den arbetar på innehållet i $_ om inget annat anges.
Mönstret som används inuti m//; ^[^;]+;([^;]+;[^;]+;[^;]+;), ser ut som om man har tappat bärvågen mellan modemen, men om vi bryter ner det så ser du hur det fungerar och kan anpassa efter behov senare.
Syftet här är att hitta post 2, 3 och 4 i den semikolon-separerade indata-raden, här färglagt som du gjorde:
regex.png
Det första tecknet är ^ och är en anchor som betyder "början på raden", alltså en position innan första tecknet på raden.
På det sättet säger vi att mönstret måste börja på radens start, inte någonstans mitt i raden.
Efter det har vi en [^;]+;, här använder vi en character class, ett primitivt subspråk som kan kallas inifrån regular expressions, och det definieras med innehållet i [].
Character class är ett annat språk så specialtecken har andra funktioner i det.
Här inne betyder ^ "inte något av följande tecken", och tecknet vi anger är ;.
En character class matchar bara ett tecken och i en regular expression är den en symbol som bara representerar ett tecken, så efteråt har vi ett + som i regular expressions är en quantifier som betyder "ett eller flera av föregående tecken eller symbol", så den fullständiga betydelsen av [^;]+; blir "ett eller flera av icke-semikolontecken", följt av ett semikolon, och det här matchar post 1 på indata-raden.
Om man har data med en specifik separator och blandat innehåll i posterna, så är det behändigt att ange postens innehåll som "icke-postseparatortecken", en exclusive match som fångar allt utom det förbjudna tecknet, vilket oftast är enklare än att försöka göra inclusive match när postens innehåll kanske inte ens är förutsägbar.
Den här första biten gör att vi har hittat starten på post 2 på raden, och läser vi vidare så kan man nu förstå vad resten av mönstret gör: ([^;]+;[^;]+;[^;]+;)
Det är en parentes, alltså fångas allting innanför parentesen in i $1.
Vi repeterar samma sak tre gånger som vi redan har gjort med post 1, för att fånga "post 2 semikolon post 3 semikolon post 4 semikolon", och det läggs automatiskt in i $1 åt oss.
Vi skriver ut $1, en lämplig vagnretur läggs till automatiskt på slutet så att varje matchat mönster hamnar på en enskild rad, och alla de raderna sorteras alfabetiskt med sort och kollapsas till unika enskilda rader med uniq.

Nu när vi har varje unikt sorteringskriterium i indata-filen insamlat som en lista med unika textrader, så kan vi mata in det i en ny oneliner med Perl, med vilken vi på enklaste sätt gör textsökning inuti indata-filen på vardera unikt sorteringskriterium och sparar varje resultat i en enskild data-fil:
perl -wne 'chomp;system(sprintf(qq(grep -F "%s" utfil.txt > %02d.txt),$_,$.))'
Vi ser att -n används så vi vet vad vår programkod har wrappats in i.
Första funktionen är chomp() och vi har inte angett argument så den jobbar på $_.
Den tittar på indata-raden och om det finns radmatningstecken på slutet så tas det bort, så efteråt är $_ ett eller två tecken kortare baserat på vad systemets lokala radmatningssymbol är.
Fanns det inget radmatningstecken på slutet så händer inget.
Nästa funktion är system() som säkert är bekant för alla som kan C; med den kan man köra externa program inifrån sitt eget program.
Den tar en textsträng som parameter och försöker exekvera textsträngen som en kommandorad i systemets kommandotolk.
Argumentet vi ger den är en sprintf() som återigen är bekant från C i ett otal varianter; det är en funktion för formatterad printning men istället för att skriva ut direkt till STDOUT som printf() så returnerar den din formatterade textsträng istället.

Det ser ut som att vi gör en konstig sak med qq(), men dessa två rader har identisk funktion:
sprintf(qq(grep -F "%s" utfil.txt > %02d.txt),$_,$.)
sprintf("grep -F \"%s\" utfil.txt > %02d.txt",$_,$.)
Vi kan inte använda "" rekursivt, därför använder vi Perls alternativa metod qq() istället i det yttre fallet, för att slippa escapa varje inre " med \".
Innehållet i $_ matas in i formatmallen %s som en textsträng mitt i kommandoraden, det här är varför chomp() behövdes för annars hade det blivit en radmatning mitt i kommandoraden.
En annan automatiskt skapad variabel som finns inuti varje iteration i loopar är $., och det är ett löpnummer på iterationen, ett-indexerat.
Vi matar in det i formatmallen %02d som nollpaddar heltalsvärdet till två tecken, alltså att värdet 1 förvandlas till 01, osv.
Vi har ju ingen loop i koden, men med -n är vi wrappade inuti en while-loop och därmed finns det numrerade iterationer tillgängliga.

Nu är det väl klart som korvspad hur det fungerar. :)

För att tydliggöra vad som sker under exekveringen så kan du använda den här smärre förfiningen:

Kod: Markera allt

cat infil_org.txt | perl -wpe 'y/,/;/;s/(\d)\.(\d)/$1,$2/g' > utfil.txt
cat utfil.txt | perl -wnle 'print $1 if (m/^[^;]+;([^;]+;[^;]+;[^;]+;)/)' | sort | uniq | perl -wne 'print "$.\t$_";chomp;system(sprintf(qq(grep -F "%s" utfil.txt > %02d.txt),$_,$.))'
Skillnaden är att aktuell iteration och aktuellt sorteringskriterium skrivs ut på skärmen med print "$.\t$_"; innan varje instans av grep körs.
Ifall du någon gång kör det här på en gigantisk datafil eller på en dator som kanske går på lågenergi för tillfället, så ser du var någonstans i processen du är och om något sorteringskriterium ser knasigt ut.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar